{ Реализация динамической структуры данных "односвязный список" (рекурсивно) }
program MyList;
type
PListElem =^TListElem; { Тип - указатель на запись типа TListElem }
TListElem = record { Тип - запись }
Data: Integer; { Здесь данные }
Next: PListElem; { А здесь указатель на следующий элемент }
end;
var
MyListPtr: PListElem = Nil; { Переменная-указатель на список }
i: Integer;
{ Процедура добавления элемента в конец списка (рекурсивно) }
procedure AddElem(var ListPtr: PListElem; NewValue: Integer);
begin
if ListPtr = Nil then
begin
New(ListPtr); { Выделяем память под указатель }
ListPtr^.Data := NewValue;
ListPtr^.Next := Nil;
end else
AddElem(ListPtr^.Next, NewValue);
end;
{ Процедура вывода на печать элементов списка по порядку (рекурсивно) }
procedure PrintList(var ListPtr: PListElem);
begin
if ListPtr <> Nil then
begin
Write(ListPtr^.Data:4);
PrintList(ListPtr^.Next);
end;
end;
{ Процедура удаления всего списка (рекурсивно) }
procedure DeleteList(var ListPtr: PListElem);
begin
if ListPtr <> Nil then
begin
DeleteList(ListPtr^.Next);
Dispose(ListPtr); { Освобождаем память по указателю }
ListPtr := Nil; { Помечаем указатель как "пустой" }
end;
end;
begin
{ Добавляем элементы в список }
for i := 1 to 10 do
AddElem(MyListPtr, i);
{ Выводим список на экран }
PrintList(MyListPtr);
WriteLn;
{ Удаляем список (освобождаем память) }
DeleteList(MyListPtr);
end.