Решенные задачи на языке Паскаль
Для тех кто хочет разобраться как работать со связанным списком!
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;
Так, это еще не все. Обязательно скачайте файлик - там исходник программы и графическое пояснение что и как происходит при выполнении этой программы.Внимательно прочитайте этот материал, затем разберитесь с помощью графического пояснения как работает программа, и вы поймете, как работать со связанным списком!
Скачать исходник