Delphi-Help

Задача 585 на Pascal

Оцените материал
(2 голосов)


Задача 585 на 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;

Так, это еще не все. Обязательно скачайте файл - там исходник программы и графическое пояснение что и как происходит при выполнении этой программы.

Внимательно прочитайте этот материал, затем разберитесь с помощью графического пояснения как работает программа, и вы поймете, как работать со связанным списком!

Прочитано 5372 раз

Авторизация



Счетчики