Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2013, 15:13   #1
shilovec5377
Форумчанин
 
Аватар для shilovec5377
 
Регистрация: 29.06.2011
Сообщений: 117
Восклицание Создать двунаправленный список

Всем привет! помогите пж сохдать двунаправленный список с числами в диапазоне -50 +50.
У меня есть простой пример однонаправленной очереди, но не знаю как сделать двунаправленную.
Помогите пж.
Код:
#include <iostream>
#include <queue>
#include <cstdlib>
 
int main() {
    
    std::queue<int> q;
    const int N = 10;
    
    for( int i=0; i<N; ++i )
    {
        q.push( rand() % 100 - 50 );
    }
    
    while( !q.empty() )
    {
        std::cout << q.front() << " ";
        q.pop();
    }
    
   return 0;
}
shilovec5377 вне форума Ответить с цитированием
Старый 31.05.2013, 16:19   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Использовать std :: deque, вестимо.
Abstraction вне форума Ответить с цитированием
Старый 31.05.2013, 16:45   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

revizor, у queue есть только push и pop (http://www.cplusplus.com/reference/queue/queue/), а вот у deque, Вы правы, есть push_back, push_front, pop_back, pop_front (http://www.cplusplus.com/reference/deque/deque/).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 31.05.2013, 16:51   #4
revizor
Форумчанин
 
Аватар для revizor
 
Регистрация: 20.01.2013
Сообщений: 146
По умолчанию

BDA, я невнимательно прочитал. Думал что deque

Последний раз редактировалось revizor; 31.05.2013 в 16:53.
revizor вне форума Ответить с цитированием
Старый 03.06.2013, 14:17   #5
shilovec5377
Форумчанин
 
Аватар для shilovec5377
 
Регистрация: 29.06.2011
Сообщений: 117
Восклицание

вот нашел пример двусвязного списка. помогите пожалуйста заполнить его рандомно:
Код:
#include <stdlib.h>
#include <iostream.h>
 
struct Node       //Структура являющаяся звеном списка
 {
     int x;     //Значение x будет передаваться в список
     Node *Next,*Prev; //Указатели на адреса следующего и предыдущего элементов списка
 };
 
 class List   //Создаем тип данных Список
 {
     Node *Head,*Tail; //Указатели на адреса начала списка и его конца
 public:
     List():Head(NULL),Tail(NULL){}; //Инициализируем адреса как пустые
     ~List(); //Деструктор
     void Show(); //Функция отображения списка на экране
     void Add(int x); //Функция добавления элементов в список
 };
 
List::~List() //Деструктор
 {   
     while (Head) //Пока по адресу на начало списка что-то есть
     {
         Tail=Head->Next; //Резервная копия адреса следующего звена списка
         delete Head; //Очистка памяти от первого звена
         Head=Tail; //Смена адреса начала на адрес следующего элемента
     }
 }
 
 void List::Add(int x)
 {
   Node *temp=new Node; //Выделение памяти под новый элемент структуры
   temp->Next=NULL;  //Указываем, что изначально по следующему адресу пусто
   temp->x=x;//Записываем значение в структуру
 
   if (Head!=NULL) //Если список не пуст
   {
       temp->Prev=Tail; //Указываем адрес на предыдущий элемент в соотв. поле
       Tail->Next=temp; //Указываем адрес следующего за хвостом элемента
       Tail=temp; //Меняем адрес хвоста
   }
   else //Если список пустой
   {
       temp->Prev=NULL; //Предыдущий элемент указывает в пустоту
       Head=Tail=temp; //Голова=Хвост=тот элемент, что сейчас добавили
   }
 }
 
 void List::Show()
 {
//ВЫВОДИМ СПИСОК С КОНЦА
     Node *temp=Tail;
      //Временный указатель на адрес последнего элемента
     while (temp!=NULL) //Пока не встретится пустое значение
     {
     cout<<temp->x<<" "; //Выводить значение на экран
     temp=temp->Prev; //Указываем, что нужен адрес предыдущего элемента
     }
     cout<<"\n";
 
 //ВЫВОДИМ СПИСОК С НАЧАЛА
     temp=Head; //Временно указываем на адрес первого элемента
      while (temp!=NULL) //Пока не встретим пустое значение
     {
     cout<<temp->x<<" "; //Выводим каждое считанное значение на экран
     temp=temp->Next; //Смена адреса на адрес следующего элемента
     }
     cout<<"\n";
 }
 
int main ()
{
 system("CLS");
 List lst; //Объявляем переменную, тип которой есть список
 lst.Add(100); //Добавляем в список элементы
 lst.Add(200);
 lst.Add(900);
 lst.Add(888);
 
 lst.Show(); //Отображаем список на экране
  
}
shilovec5377 вне форума Ответить с цитированием
Старый 03.06.2013, 14:38   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
for (int i = 0, n = rand()%11 + 10; i < n; ++i) {
  lst.Add(rand()%101-50);
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.06.2013, 16:13   #7
shilovec5377
Форумчанин
 
Аватар для shilovec5377
 
Регистрация: 29.06.2011
Сообщений: 117
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
for (int i = 0, n = rand()%11 + 10; i < n; ++i) {
  lst.Add(rand()%101-50);
}
это подставить в (int main())???

все подставил, а почему выводит так
Код:
-49 41 1 -31 15 -11 -6 44 -6 -20 -42 6 2 -38 4 -18 
-18 4 -38 2 6 -42 -20 -6 44 -6 -11 15 -31 1 41 -49

Последний раз редактировалось Stilet; 03.06.2013 в 16:24.
shilovec5377 вне форума Ответить с цитированием
Старый 03.06.2013, 16:34   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от shilovec5377
а почему выводит так
А Вы почитайте комментарии в void List::Show().
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.06.2013, 16:35   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

<double-posting>
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 03.06.2013 в 16:47.
BDA вне форума Ответить с цитированием
Старый 03.06.2013, 16:38   #10
shilovec5377
Форумчанин
 
Аватар для shilovec5377
 
Регистрация: 29.06.2011
Сообщений: 117
По умолчанию

спасибо.
помогите пожалуйстас условием: ( поменять местами элементы с максимальныи и минимальным значениями, при этом элементы не должны перемещаться в памяти )
shilovec5377 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать двунаправленный список shilovec5377 Общие вопросы Delphi 5 31.05.2013 12:49
Двунаправленный список de_coder Паскаль, Turbo Pascal, PascalABC.NET 2 15.10.2012 12:41
Создать односвязный список и вывести его на экран. Из этого списка создать новый список по указанному ниже правилу и новый список San111 Паскаль, Turbo Pascal, PascalABC.NET 1 15.05.2012 22:08
Двунаправленный список Вельвет Помощь студентам 1 10.01.2012 14:14
Двунаправленный список dip Помощь студентам 3 02.03.2010 12:16