П Р И Л О Ж Е Н И Е   5

ЛИНЕЙНЫЙ ОДНОСВЯЗНЫЙ СПИСОК

Пример организации односвязного линейного списка

#include <iostream.h>
#include <conio.h>
typedef int DataType;
class Element //класс, описывающий элемент односвязного списка
{ //закрытые члены класса
   DataType Info; // поле данных
   Element * Next; // указатель на следующий элемент
 public: //открытые члены класса
   Element() //конструктор элемента
   {
      Next = NULL;
   }
};
class List    // класс, описывающий односвязный список
{ //закрытые члены класса
   Element *Begin, *End; //указатели на первый и последний 
                         //элементы списка
 public: //открытые члены класса
   List() //конструктор списка
   {
      Begin = End = NULL;
   }
   ~List() //деструктор списка
   {
      Element *Rex; //вспомогательный указатель
      While (Begin) // пока список не пуст
      {
         Rex = Begin; // запоминаем адрес первого элемента
         Begin = Begin->Next; // переставляем указатель 
                      // начала на следующий элемент списка
         delete Rex; // удаляем первый элемент списка
      }
   }
   void Add(void) //метод добавления элемента в конец списка
   {
      Element *Rex = new Element; //выделяем память 
                                  //под новый элемент
      cout << "\n\tADD:\n";
      cout << "\t\tEnter Info = ";
      cin >> Rex->Info; // вводим данные
      cout << "\tPress any key...\n\n";
      if (Begin == NULL) //если список пуст
         Begin = Rex; //добавляемый элемент является первым
      else  //иначе
        End->Next = Rex; //добавляем его в конец списка
      End = Rex; //добавленный элемент является последним
   }
   void Show (void) //печать списка
   {
      Element *Rex;
      cout << "\n\tSHOW:\n";
      if (!Begin) //если очередь пуста
      {
         cout << "\t\tList is empty!\n";
         cout << "\tPress any key...\n\n";
         return;
      }
      cout << "\t\tInfo\n";
      Rex = Begin; //устанавливаем указатель текущего 
                   //элемента на начало списка
      while (Rex) //пока не конец списка
      {  //выводим значение поля данных
         cout << "\t\t\t"<< Rex->Info << endl;
         Rex = Rex->Next; //переходим к следующему
      }
      cout << "\tPress any key...\n\n";
   }
};
main()
{
   List L;
   int key = 0;
   do
   {
      cout << "MENU:\n\n";
      cout << "\t1 – ADD\n\t2 – SHOW\n";
      cout << "\t3 – Exit\n\n";
      cout << "Press any key...\n";
      key = getchar();
      switch(key)
      {
         case 49: L.Add(); break;
         case 50: L.Show(); break;
      }
   }
   while(key!=51);
   return 0;
}