Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication13.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <conio.h>
- using namespace std;
- struct Node //Структура являющаяся звеном списка
- {
- char* first;
- int second;
- int third; //Значение x будет передаваться в список
- Node *Next, *Prev; //Указатели на адреса следующего и предыдущего элементов списка
- int nomer;
- };
- class List //Создаем тип данных Список
- {
- Node *Head, *Tail; //Указатели на адреса начала списка и его конца
- public:
- List() :Head(NULL), Tail(NULL){}; //Инициализируем адреса как пустые
- ~List(); //Деструктор
- void Show(); //Функция отображения списка на экране
- void Add(char* a, int b, int c); //Функция добавления элементов в список
- };
- List::~List() //Деструктор
- {
- while (Head) //Пока по адресу на начало списка что-то есть
- {
- Tail = Head->Next; //Резервная копия адреса следующего звена списка
- delete Head; //Очистка памяти от первого звена
- Head = Tail; //Смена адреса начала на адрес следующего элемента
- }
- }
- void List::Add(char* a, int b, int c)
- {
- Node *temp = new Node; //Выделение памяти под новый элемент структуры
- temp->Next = NULL; //Указываем, что изначально по следующему адресу пусто
- temp->first = a;
- temp->second = b;
- temp->third = c;//Записываем значение в структуру
- if (Head != NULL) //Если список не пуст
- {
- temp->Prev = Tail;
- temp->nomer = Tail->nomer + 1;//Указываем адрес на предыдущий элемент в соотв. поле
- Tail->Next = temp; //Указываем адрес следующего за хвостом элемента
- Tail = temp; //Меняем адрес хвоста
- }
- else //Если список пустой
- {
- temp->Prev = NULL; //Предыдущий элемент указывает в пустоту
- temp->nomer = 0;
- Head = Tail = temp; //Голова=Хвост=тот элемент, что сейчас добавили
- }
- }
- void List::Show()
- {
- cout << "END" << endl;
- Node *temp = Tail;
- //Временный указатель на адрес последнего элемента
- while (temp != NULL) //Пока не встретится пустое значение
- {
- cout << temp->nomer << " " << temp->first << " " << temp->second << " " << temp->third << endl; //Выводить значение на экран
- temp = temp->Prev; //Указываем, что нужен адрес предыдущего элемента
- }
- cout << "\n";
- cout << "START:" << endl;
- temp = Head; //Временно указываем на адрес первого элемента
- while (temp != NULL) //Пока не встретим пустое значение
- {
- cout << temp->nomer << " " << temp->first << " " << temp->second << " " << temp->third << endl; //Выводим каждое считанное значение на экран
- temp = temp->Next; //Смена адреса на адрес следующего элемента
- }
- cout << "\n\n\n";
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- char* a = "Pervyi";
- int b = 3;
- int c = 4;
- List list1;
- char* d = "Vtoroy";
- int e = 6;
- int f = 7;
- list1.Add(a, b, c);
- list1.Add(d, e, f);
- list1.Show();
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement