
POINTERS
Lets modify the previous program which introduced a
separate pointer for tranversing the links of records. This time, rather than
statically creating three records, we will allow the use to enter the details
as the list is created.
The modified program appears below.
program PointerRecordExample3( input, output );
type rptr = ^recdata;
recdata = record
number : integer;
code : string;
nextrecord : rptr
end;
var startrecord, listrecord, insertptr : rptr;
digitcode : integer;
textstring : string;
exitflag, first : boolean;
begin
exitflag := false;
first := true;
while exitflag = false do
begin
writeln('Enter in a digit [-1 to end]');
readln( digitcode );
if digitcode = -1 then
exitflag := true
else
begin
writeln('Enter in a small text string');
readln( textstring );
new( insertptr );
if insertptr = nil then
begin
writeln('1: unable to allocate storage space');
exit
end;
if first = true then begin
startrecord := insertptr;
listrecord := insertptr;
first := false
end
else begin
listrecord^.nextrecord := insertptr;
listrecord := insertptr
end;
insertptr^.number := digitcode;
insertptr^.code := textstring;
insertptr^.nextrecord := nil
end
end;
while startrecord <> nil do
begin
listrecord := startrecord;
writeln( startrecord^.number );
writeln( startrecord^.code );
startrecord := startrecord^.nextrecord;
dispose( listrecord )
end
end.
