Программирование (фото с сайта pixabay.com)

Односвязный список (рекурсивная реализация на языке Pascal)

Примеры
{ Реализация динамической структуры данных "односвязный список" (рекурсивно) }
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.

Добавить комментарий

Ваш адрес email не будет опубликован.