Форум программистов, компьютерный форум CyberForum.ru

Создать двунаправленный список - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Объясните ошибку http://www.cyberforum.ru/cpp-beginners/thread884774.html
using namespace std; int main(){ setlocale(LC_ALL, "Russian"); system("color 0E"); srand(time(NULL)); cout << "-------------------" << endl; int var = 100; int *NewP; int *p = &var;
C++ Удаление из текстового файла Необходимо удалить структуру из текстового файла. Я создал 2 файла. Считываю все с первого , вбиваю во второй. Затем наоборот. Если удалять первую запись , то она бесконечно перезаписывается. Если вторую или третью то она записывает только во второй файл.В общем вот мой код: #include <iostream> #include <fstream> using namespace std; struct workers { unsigned int id; char name; http://www.cyberforum.ru/cpp-beginners/thread884773.html
Иероглифы после CharToOemA C++
Подскажите, почему после казалось бы простейшей операции в "buf" оказываются каракули? setllocale вроде не помагает .... Каракули я вижу в дебагере и если просто выводить в окошко в WinApi приложение. std::string str="ПРЭВЭД МЕДВЕД"; char* buf=new char; strcpy_s(buf,str.size()+1,str.c_str()); CharToOemA(buf,buf);
C++ Решение транспортной задачи с промежуточными перевозками для нахождения оптимальной конфигурации электрической сети
Исходные данные для траспортной задачи с промежуточными перевозками Задаются: Конфигурация сети вида: Мощности пунктов: P2=0,6 Ое P3=0,3 Ое P4=1,5 Ое Мощность электростанции(пункт 1)=2,4 Ое и удельные стоимости транспорта энер¬гии вида
C++ Чтение данных из файла http://www.cyberforum.ru/cpp-beginners/thread884750.html
1. Дан файл с именами людей, датами рождения и смерти. Прочитать данные из файла и поместить их в структуру данных, которая будет выглядеть как "Имя человека" tab "дата рождения" tab "дата смерти" . При этом запрещено использовать структуру данных с константным количеством элементов. Вывести на консоль данные всех людей в виде оформленной таблицы
C++ функция с прототипом int (string, string) В файле USAPresidendid.txt приведены данные о бывших президентах США: имя, время нахождения на посту президента, дата рождения, дата смерти. Даты даны в формате mm/dd/yyyy. Если президент живой, то вместо даты смерти стоит звездочка '*'. Разделителем полей является знак табуляции '\t'. 1. Прочитать данные из файла и поместить их в структуру данных, которая удобна для использования при решении... подробнее

Показать сообщение отдельно
shilovec5377
 Аватар для shilovec5377
28 / 53 / 1
Регистрация: 26.05.2011
Сообщений: 752
04.06.2013, 11:12  [ТС]     Создать двунаправленный список
вот код, но что-то выводит только исходный список (заполненный рандомно), а (поменяный min с max) не хочет, может я не так вывожу?

функция для замены min с max: void List::Swap() //меняем min с max
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <stdlib.h>
#include <iostream>
using namespace std; 
 
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); //Функция добавления элементов в список
     void Swap();//sortirovka
 };
 
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";
  }
 
 
 
 void List::Swap()  //меняем min с max
{
    Node *min = Head, *max = Head, *cur = Head;        //head element
 
//Поиск минимального и максимального узла
    while(cur != Tail)
    {
        cur = cur->Next;
        if(cur->x < min->x)
        {
            min = cur;
        }
        if(cur->x > max->x)
        {
            max = cur;
        }
    }
    
    Node *beforeMin = min->Prev;
    Node *afterMin = min->Next;
    
    Node *beforeMax = min->Prev;
    Node *afterMax = max->Next;
    
    //выбор адресов элементов
    beforeMin->Next = max;
    afterMin->Prev = max;
    
    beforeMax->Next = min;
    afterMax->Prev = min;
    
    min->Prev = beforeMax;
    min->Next = afterMax;
    
    max->Prev = beforeMin;
    max->Next = afterMin;
    
//Проверка головы и хвоста
    if(min == Head) Head = max;
    if(min == Tail) Tail = max;
    
    if(max == Head) Head = min;
    if(max == Tail) Tail = min;
}
 
 
 
int main ()
{
 
 List lst; //Объявляем переменную, тип которой есть список
for (int i = 0, n = rand()%11 + 10; i < n; ++i) 
{
  lst.Add(rand()%101-50);
}
 
 
 lst.Show(); //Отображаем список на экране
  
 lst.Swap(); //Отображаем поменяный список на экране
 return 0;
}
 
Текущее время: 21:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru