Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Чет про программирование / туф / 15_lists / list
.pas {$mode objfpc}
type
PElem = ^TElem;
TElem = record
next: PElem;
data: integer;
end;
var
head: PElem;
i: integer;
procedure list_insert(var a: PElem; data: integer);
var
new_elem: PElem;
begin
writeln('list insert a = ', cardinal(a), ', data = ', data);
new_elem := new(PElem);
new_elem^.data := data;
writeln('-> new for ', cardinal(new_elem));
if a = nil then begin
a := new_elem;
a^.next := nil;
exit;
end;
new_elem^.next := a^.next;
a^.next := new_elem;
end;
procedure list_print(a: PElem);
begin
write('list print for a = ', cardinal(a), ': ');
while a <> nil do begin
write(a^.data, ' ');
a := a^.next;
end;
writeln;
end;
procedure list_delete(var a: PElem);
var
t: PElem;
begin
if a^.next = nil then begin
dispose(a);
a := nil;
exit;
end;
t := a^.next;
a^.next := a^.next^.next;
writeln('-> dispose for ', cardinal(t));
dispose(t);
end;
procedure list_dispose(head: PElem);
var
t: PElem;
begin
while head <> nil do begin
t := head^.next;
writeln('-> dispose for ', cardinal(head));
dispose(head);
head := t;
end;
end;
begin
head := nil;
for i := 1 to 5 do
list_insert(head, i );
list_print(head);
list_delete(head^.next);
list_print(head);
list_dispose(head);
end.
type
PElem = ^TElem;
TElem = record
next: PElem;
data: integer;
end;
var
head: PElem;
i: integer;
procedure list_insert(var a: PElem; data: integer);
var
new_elem: PElem;
begin
writeln('list insert a = ', cardinal(a), ', data = ', data);
new_elem := new(PElem);
new_elem^.data := data;
writeln('-> new for ', cardinal(new_elem));
if a = nil then begin
a := new_elem;
a^.next := nil;
exit;
end;
new_elem^.next := a^.next;
a^.next := new_elem;
end;
procedure list_print(a: PElem);
begin
write('list print for a = ', cardinal(a), ': ');
while a <> nil do begin
write(a^.data, ' ');
a := a^.next;
end;
writeln;
end;
procedure list_delete(var a: PElem);
var
t: PElem;
begin
if a^.next = nil then begin
dispose(a);
a := nil;
exit;
end;
t := a^.next;
a^.next := a^.next^.next;
writeln('-> dispose for ', cardinal(t));
dispose(t);
end;
procedure list_dispose(head: PElem);
var
t: PElem;
begin
while head <> nil do begin
t := head^.next;
writeln('-> dispose for ', cardinal(head));
dispose(head);
head := t;
end;
end;
begin
head := nil;
for i := 1 to 5 do
list_insert(head, i );
list_print(head);
list_delete(head^.next);
list_print(head);
list_dispose(head);
end.