{------------------------------------------------------------------| | процедуры и функции у которых в названии B -без заглавного звена | | процедуры и функции у которых в названии Z - c заглавным звеном | |------------------------------------------------------------------} {Инициализация} Procedure BListInit(var L: TList); {Добавление в голову} Procedure BListAddFirst(var L: TList; E:TElem); {Добавление в хвост} Procedure BListAddLast(var L: TList; E: TElem); {переворачивание} Procedure BListInvert(var L: TList); {Очистка} Procedure ListClear ( var L: TList ); {------------------------------------------------------------} IMPLEMENTATION { 1. Инициализация списка } {Список без заглавного звена} Procedure BListInit(var L: TList); begin L:= nil end; {2. Добавление элемента в начало списка} Procedure BListAddFirst(var L: TList; E:TElem); var N: TList; Begin new(N); N^.Info:=E; N^.Next:=L; L:=N end; {procedure BListAddFirst(var L: TList; E: TElem); var N: TList; P: TList; Begin new(N); N^.Info :=E; N^.Next :=nil; if L= nil then L:=N else begin P:=L; while P^.Next <> nil do P:=P^.Next; P^.Next:=N end End;} { 3. Добавление элемента в конец списка } { Список без заглавного звена } procedure BListAddLast(var L: TList; E: TElem); var N: TList; { добавляемое звено списка } { вспомогательный указатель для } { поиска последнего элемента списка } P: TList; Begin new(N); N^.Info :=E; N^.Next :=nil; if L= nil then L:=N else begin { поиск последнего элемента списка } P:=L; while P^.Next <> nil do P:=P^.Next; {добавление в список нового звена } P^.Next:=N end End; { 5. Переворот списка } { Список без заглавного звена } procedure BListInvert(var L: TList); var H: TList; { вспомогательный указатель } P: TList; { указатель на обработанный элемент списка } begin P := nil; while L<>nil do begin {( запоминаем указатель на следующий )} H := L^.Next; {( теперь следующий за текущим будет звено Р )} L^.Next := P; {( текущий становится предыдущим )} {( для следующего шага )} P := L; {( переиещаеися к следующеиу элементу списка )} L:=H end; L :=P { самый последний становится первым } end; { 7. Удаление всех элементов списка } procedure ListClear ( var L: TList ); var N: TList; { указатель на удаляемое звено списка } begin while L <> nil do begin N :=L; L:=L^.Next; dispose(N) end end;