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