Скачать программу testlist.exe
// TestList.cpp : // #include "stdafx.h" #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 AddToHead(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::AddToHead(int x) { Node *temp = new Node; //Выделение памяти под новый элемент структуры temp->Prev = NULL; //Указываем, что изначально по предыдущему адресу пусто temp->x = x;//Записываем значение в структуру if (Head != NULL) //Если список не пуст { temp->Next = Head; //Указываем адрес на предыдущий элемент в соотв. поле Head->Prev = temp; //Указываем адрес следующего за хвостом элемента Head = temp; //Меняем адрес головы } else //Если список пустой { temp->Next = NULL; //Предыдущий элемент указывает в пустоту Head = Tail = temp; //Голова=Хвост=тот элемент, что сейчас добавили } } void List::Show() { //ВЫВОДИМ СПИСОК С НАЧАЛА Node *temp = Tail; temp = Head; //Временно указываем на адрес первого элемента cout << "\nList\n"; while (temp != NULL) //Пока не встретим пустое значение { cout << temp->x << "->"; //Выводим каждое считанное значение на экран temp = temp->Next; //Смена адреса на адрес следующего элемента } cout << "NULL"; cout << "\n\nInput element by insert to begin of list (0 - to exit) :"; } int _tmain(int argc, _TCHAR* argv[]) { system("CLS"); List lst; //Объявляем переменную, тип которой есть список lst.Add(10); //Добавляем в список элементы lst.Add(20); lst.Add(30); lst.Add(40); int a=1; while (a!=0) { lst.Show(); cin >> a; lst.AddToHead(a); } return 0; }