Advertisement
messimmous

For LIST FOR KAMALOVA

Mar 27th, 2015
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.84 KB | None | 0 0
  1. // ConsoleApplication13.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <conio.h>
  7.  
  8. using namespace std;
  9.  
  10. struct Node       //Структура являющаяся звеном списка
  11. {
  12.     char* first;
  13.     int second;
  14.     int third; //Значение x будет передаваться в список
  15.     Node *Next, *Prev; //Указатели на адреса следующего и предыдущего элементов списка
  16.     int nomer;
  17. };
  18.  
  19. class List   //Создаем тип данных Список
  20. {
  21.     Node *Head, *Tail; //Указатели на адреса начала списка и его конца
  22. public:
  23.     List() :Head(NULL), Tail(NULL){}; //Инициализируем адреса как пустые
  24.     ~List(); //Деструктор
  25.     void Show(); //Функция отображения списка на экране
  26.     void Add(char* a, int b, int c); //Функция добавления элементов в список
  27. };
  28.  
  29. List::~List() //Деструктор
  30. {
  31.     while (Head) //Пока по адресу на начало списка что-то есть
  32.     {
  33.         Tail = Head->Next; //Резервная копия адреса следующего звена списка
  34.         delete Head; //Очистка памяти от первого звена
  35.         Head = Tail; //Смена адреса начала на адрес следующего элемента
  36.     }
  37. }
  38.  
  39. void List::Add(char* a, int b, int c)
  40. {
  41.     Node *temp = new Node; //Выделение памяти под новый элемент структуры
  42.     temp->Next = NULL;  //Указываем, что изначально по следующему адресу пусто
  43.     temp->first = a;
  44.     temp->second = b;
  45.     temp->third = c;//Записываем значение в структуру
  46.     if (Head != NULL) //Если список не пуст
  47.     {
  48.         temp->Prev = Tail;
  49.         temp->nomer = Tail->nomer + 1;//Указываем адрес на предыдущий элемент в соотв. поле
  50.         Tail->Next = temp; //Указываем адрес следующего за хвостом элемента
  51.         Tail = temp; //Меняем адрес хвоста
  52.     }
  53.     else //Если список пустой
  54.     {
  55.         temp->Prev = NULL; //Предыдущий элемент указывает в пустоту
  56.         temp->nomer = 0;
  57.         Head = Tail = temp; //Голова=Хвост=тот элемент, что сейчас добавили
  58.     }
  59. }
  60.  
  61.  
  62.  
  63. void List::Show()
  64. {
  65.     cout << "END" << endl;
  66.     Node *temp = Tail;
  67.     //Временный указатель на адрес последнего элемента
  68.     while (temp != NULL) //Пока не встретится пустое значение
  69.     {
  70.         cout << temp->nomer << " " << temp->first << " " << temp->second << " " << temp->third << endl; //Выводить значение на экран
  71.         temp = temp->Prev; //Указываем, что нужен адрес предыдущего элемента
  72.     }
  73.     cout << "\n";
  74.  
  75.     cout << "START:" << endl;
  76.     temp = Head; //Временно указываем на адрес первого элемента
  77.     while (temp != NULL) //Пока не встретим пустое значение
  78.     {
  79.         cout << temp->nomer << " "  << temp->first << " " << temp->second << " " << temp->third << endl; //Выводим каждое считанное значение на экран
  80.         temp = temp->Next; //Смена адреса на адрес следующего элемента
  81.     }
  82.     cout << "\n\n\n";
  83. }
  84.  
  85.  
  86.  
  87. int _tmain(int argc, _TCHAR* argv[])
  88. {
  89.     char* a = "Pervyi";
  90.     int b = 3;
  91.     int c = 4;
  92.     List list1;
  93.     char* d = "Vtoroy";
  94.     int e = 6;
  95.     int f = 7;
  96.     list1.Add(a, b, c);
  97.     list1.Add(d, e, f);
  98.     list1.Show();
  99.     _getch();
  100.     return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement