Program Zeiger;
TYPE
String20 = string[20];
Pstring20 = ^Element;
Element = RECORD
info : String20;
next : Pstring20;
END;
VAR
Pstart, Pend: Pstring20;
procedure pointer_init(var Pstart,Pend: Pstring20);
begin
Pstart:= nil;
Pend:= nil;
end;
procedure pointer_delete(var Pstart,Pend: Pstring20);
var
tmp: Pstring20;
begin
while Pstart <> nil do
begin
tmp:= Pstart;
Pstart:= Pstart^.next;
dispose(tmp);
end;
Pstart:= nil;
Pend:= nil;
end;
procedure pointer_new_begin (var Pstart,Pend: Pstring20; info: String20);
var
tmp: Pstring20;
begin
new(tmp);
tmp^.info:= info;
tmp^.next:= nil;
if Pstart = nil then
begin
Pstart:= tmp;
Pend:= tmp;
end
else
begin
tmp^.next:= Pstart;
Pstart:= tmp;
end;
end;
procedure pointer_new_end (var Pstart,Pend: Pstring20; info: String20);
var
tmp: Pstring20;
begin
new(tmp);
tmp^.info:= info;
tmp^.next:= nil;
if Pstart = nil then
begin
Pstart:= tmp;
Pend:= tmp;
end
else
begin
Pend^.next:= tmp;
Pend:= tmp;
end;
end;
procedure main_input(var Pstart,Pend: Pstring20);
var
str, choose: String20;
begin
repeat
write('Bitte Mensch^.Inhalt angeben!');
readln(str);
write('am (E)nde oder am (A)nfang?');
repeat
readln(choose);
until ((choose = 'e') or (choose = 'E') or (choose = 'a') or (choose = 'A'));
if((choose = 'a') or (choose = 'A')) then pointer_new_begin(Pstart, Pend, str);
if((choose = 'e') or (choose = 'E')) then pointer_new_end(Pstart, Pend, str);
WriteLn('Zum Abbrechen bitte e oder E drücken!');
readln(choose);
until ((choose = 'e') or (choose = 'E'));
end;
procedure main_output(Pwork: Pstring20);
var
i: cardinal;
begin
i:= 0;
writeln('Ausgabe der Liste');
writeln('=================');
writeln('');
while Pwork <> nil do
begin
inc(i);
writeln('Knoten ',i,' Inhalt: |',Pwork^.info,'|');
Pwork := Pwork^.next;
end;
writeln('');
writeln('Gesamt-Knoten: ',i);
end;
procedure main_edit();
begin
end;
begin
pointer_init(Pstart,Pend); //initialisierung
main_input(Pstart,Pend); //eingabe
main_output(Pstart); //ausgabe
readln; //damit das programm nicht gleich beendet wird
pointer_delete(Pstart,Pend); //Speicherplatz wieder freigeben
end.