
POINTERS
The previous program can be rewritten to
make it easier to read, understand and maintain. To do this, we will use
a dedicated pointer to maintain and initialise the list, rather than get
into the long notation that we used in the previous program, eg,
startrecord^.nextrecord^.nextrecord^.number := 30;The modified program now looks like,
program PointerRecordExample2( output );
type rptr = ^recdata;
recdata = record
number : integer;
code : string;
nextrecord : rptr
end;
var startrecord, listrecord : rptr;
begin
new( listrecord );
if listrecord = nil then
begin
writeln('1: unable to allocate storage space');
exit
end;
startrecord := listrecord;
listrecord^.number := 10;
listrecord^.code := 'This is the first record';
new( listrecord^.nextrecord );
if listrecord^.nextrecord = nil then
begin
writeln('2: unable to allocate storage space');
exit
end;
listrecord := listrecord^.nextrecord;
listrecord^.number := 20;
listrecord^.code := 'This is the second record';
new( listrecord^.nextrecord );
if listrecord^.nextrecord = nil then
begin
writeln('3: unable to allocate storage space');
exit
end;
listrecord := listrecord^.nextrecord;
listrecord^.number := 30;
listrecord^.code := 'This is the third record';
listrecord^.nextrecord := nil;
while startrecord <> nil do
begin
listrecord := startrecord;
writeln( startrecord^.number );
writeln( startrecord^.code );
startrecord := startrecord^.nextrecord;
dispose( listrecord )
end
end.
The lines of code
new( listrecord );
if listrecord = nil then
begin
writeln('1: unable to allocate storage space');
exit
end;
startrecord := listrecord;
listrecord^.number := 10;
listrecord^.code := 'This is the first record';
creates the first record and initialises it, then remembers where it is
by saving it into startrecord. Pictorially, it looks like,

The lines of code
new( listrecord^.nextrecord );
if listrecord^.nextrecord = nil then
begin
writeln('2: unable to allocate storage space');
exit
end;
listrecord := listrecord^.nextrecord;
listrecord^.number := 20;
listrecord^.code := 'This is the second record';
add a new record to the first by linking it into listrecord^.nextrecord,
then moving listrecord to the new record. Pictorially, it looks
like,

The lines of code
new( listrecord^.nextrecord );
if listrecord^.nextrecord = nil then
begin
writeln('3: unable to allocate storage space');
exit
end;
listrecord := listrecord^.nextrecord;
listrecord^.number := 30;
listrecord^.code := 'This is the third record';
listrecord^.nextrecord := nil;
add the last record to the previous by linking it into listrecord^.nextrecord,
then moving listrecord to the new record. Pictorially, it looks like,

