Системное программирование в UNIX средствами Free Pascal


         

Следующая простая программа использует описанные


Следующая простая программа использует описанные процедуры. Она создает односвязный список, изображенный на рис. 12.1, а затем удаляет его. Обратите внимание на способ обхода списка процедурой
printlist. Используемый в ней цикл while типичен для программ, в которых применяются связные списки.
{$i list.inc}
(* Обход и вывод списка *)
procedure printlist (listhead:pMEMBER);
var
  m:pMEMBER;
begin
  writeln (#$a'Содержимое списка:');
  if listhead = nil then
    writeln (#9'(пусто)')
  else
  begin
    m := listhead;
    while m <> nil do
    begin
      writeln (#9, m^.m_data);
      m := m^.m_next;
    end;
  end;
end;
const
  strs:array [0..2] of pchar=('again', 'world', 'Hello');
(* Программа для проверки процедур работы со списком *)
var
  head, newm:pMEMBER;
  j:integer;
begin
  (* Инициализация списка *)
  head := nil;
  (* Добавление элементов к списку *)
  for j:=0 to 2 do
  begin
    newm := new_member (strs[j]);
    add_member (@head, newm);
  end;
  (* Вывести элементы списка *)
  printlist (head);
  (* Удалить список *)
  free_list (@head);
  (* Вывести элементы списка *)
  printlist (head);
end.
Следует обратить внимание и на то, как в начале программы был инициализирован список присвоением указателю head значения nil. Это важно, так как иначе список мог оказаться заполненным «мусором», что неизбежно привело бы к ошибочной работе или к аварийному завершению программы.
Рассматриваемая программа должна выдать такой результат:
Содержимое списка:
        Hello world again
Содержимое списка:
        (пусто)

Содержание  Назад  Вперед