Создать связанный список телефонный справочник- Pascal(Паскаль)

TYPE
Link=^data;                          {указатель на тип данных              }
data=record                      {описание самого типа данных              }
      FIO:string[50];                {ФИО                                  }
      Tel:string[10];                {телефон                              }
      next:Link;                     {указатель (адрес) на следующую запись}
     end;

VAR
P,First:Link;                        {указатели на запись: текущую, первую }

BEGIN
 writeln('Число свободных блоков в динамически распределяемой области памяти:');
 writeln('До загрузки данных = ',memavail);

 P:=new(Link);                {=1=  выделить память и адрес записать в P}
 P^.FIO:='Шабаров П.С';       {=2=  выделенную память заполнить данными }
 P^.Tel:='93-2-46';
 P^.next:=nil;
 First:=P;

 P:=new(Link);                {=3=}
 P^.FIO:='Соловьев А.А.';     {=4=}
 P^.Tel:='3-12-41';
 P^.next:=First;
 First:=P;

 P:=new(Link);                {=5=}
 P^.FIO:='Липовский Р.Е.';    {=6=}
 P^.Tel:='3-32-17';
 P^.next:=First;
 First:=P;

 writeln('После загрузки данных = ',memavail);

 while P<>nil do
 begin
  First:=P^.next;              {сохранить адрес указывающий на следующую запись}
  dispose(P);                  {=7=  освободить память по текущему адресу      }
  P:=First;                    {сохраненный адрес записать в P                 }
 end;
 writeln('После удаления данных = ',memavail);
 readln;
END.

Данная программа показывает: как создать простой связанный список, что происходит с динамической памятью и как освободить память занимаемую списком.

  • Для создания списка сначала создаем тип — какие данные будут в памяти.
    Тип берем RECORD (запись). Основной переменной любого связанного списка является — переменная-указатель, которая указывает на следующую запись.
    Переменная-указатель — занимает 4 байта и хранит в себе какой-либо адрес.
    В данной программе переменная-указатель это: next, P, First.
  • Необходимо указать на какой тип указывает переменная-указатель.
    В данной программе тип указателя это: Link.
  • Выделяем новую динамическую память и сохраняем адрес (где расположена выделенная память).
  • P:=new(Link);
  • Заполняем нужными данными переменную-указатель.
  • P^.FIO:=’Шабаров П.С’; P^.Tel:=’93-2-46′;
  • Заполняем нужными данными переменную-указатель: записываем адрес для следующей записи.P^.next:=nil;Если запись первая, то переменная-указатель следующей записи должен указывать на пустой указатель — nil.
  • Сохраняем адрес P в First (можно было сохранить сразу после 3-го действия).First:=P;
  • Если нужны еще записи, то переходим к действию 3.
  • Связанный список готов.
  • Далее выполняем действия.
while P<>nil do 
begin 
First:=P^.next; 
dispose(P); 
P:=First; end;

Для обхода всех записей списка делаем вот такой цикл:

 P:=First;                {начать с первой записи          }
 while P<>nil do          {выполняем пока не дошли до конца}
 begin
  ...                     {что-то делаем                   }
  ...

  P:=P^.next;             {переходим к следующей записи    }
 end;

Leave a Comment

42 + = 48