- •I: Byte; I: Byte;
- •Связанный список
- •Var Заголовок: Указатель_на_узел;
- •Interface
- •Var a:array[1..10] of ta;
- •Var Key: Char);
- •Var Key: Char);
- •Var Key: Char);
- •Структура модели списка. Модуль построения и редактирования списка
- •Interface
- •Implementation
- •Создание (построение) и опустошение списка
- •Var I:integer;
- •Var temp:pTelem;
- •Вывод содержимого информационных полей списка (прямая и обратная печать)
- •Включение и удаление узлов списка
- •Var I:integer; temp:ptElem;
- •Var I:integer;
- •Поиск узла по номеру
- •Var I:integer;
Структура модели списка. Модуль построения и редактирования списка
Согласно шаблону описанному в предыдущем разделе структуру двунапраленного линейного списка из трех узлов можно представить графически, как это показано на рис.13.
Рис.13. Структура двунаправленного линейного списка
Каждый из трех узлов(они пронумерованы) содержит три поля:
- указатель на предыдущий узел (поле Prev);
- указатель на последующий узел (поле Next);
- информационное поле (поле Down).
Информационное поле с именем Down описано типом данных запись (record TA).
Содержание полей этой записи представлено ниже под каждым узлом списка.
В поле Prev первого узла, как и в поле Next последнего записан адрес Nil (дословно в никуда). Зарезервированное слово nil является признаком конца списка и это действительно так, поскольку ни перед первым узлом, ни после последнего других узлов нет и указывать не на что. Запись TList содержит:
- указатель на первый узел списка (поле First);
- указатель на последний узел списка (поле Last);
- поле счетчика числа узлов в списке (поле Count).
Указатели First и Last предназначены и используются для процедуры построения и процедуры редактирования списка. Они предоставляют определенные удобства в работе со списком, поскольку по указателю First легко попасть в начало списка, а по указателю Last в его конец.
В соответствии с представленной структурой перейдем к описанию модуля Unit2.
Интерфейсная часть модуля Unit2 имеет следующий вид:
unit Unit2;
Interface
uses Classes;
type
TA=record { Автомобиль }
M: String[15]; { Ф.И.О. владельца }
N: String[10]; { Марка }
W: String[14]; { Номер }
end;
PTElem=^TElem;
TElem=record
Prev,Next : PTElem;
Down : TA;
end;
TList=record
First,Last : PTElem;
Count : Longint;
end;
Var
L : Tlist; { переменная для работы с указателями First
и Last и счетчиком Count }
Current : PTElem; { служебный указатель для
перемещения по узлам списка}
A : array[1..10] of TA; {информационный массив-буфер
описан в разделе 1.1}
ind,key1,t:integer; {ind - счетчик заполненных
элементов массива «а» или иначе
заданное число узлов будущего
списка, key1 – служебный ключ-
признак и t – номер заданного узла}
procedure TList_Init; {процедура инициализации
указателей First , Last и счетчика Count}
procedure CreateList; {процедура построения списка}
procedure PrintFirst(mem:TStrings); {процедура
прямой печати списка}
procedure PrintLast (mem:TStrings); {процедура
обратно печати списка}
procedure SearchNode (mem:TStrings); {процедура
поиска узла по номеру}
procedure DisposeList; {процедура удаления списка}
procedure DeleteNode;{процедура удаления узла списка}
procedure AddAfterNode; {процедура добавления узла в
список после заданного номера}
