The program listed below reads, from a file, records describing the name and height of a person. It stores this data in a singly-linked list of records.
It is meant to be part of an interactive database program, in
which the user types commands to change the
list in some way. One of the
functions that the user can request
is to move all records with height greater than some value, V,
to the front of the linked list. That is, all records that have
a person with
should be moved to come before all
of the other records in the list. The records that are moved
do not otherwise need to be in any particular order.
You are to complete this program by writing the code for the procedure MoveFront, which should implement the move-to-front function described above. MoveFront is called in the main program below.
The other commands, already implemented in the code below, are to display the list (P) and to quit the program (Q).
You should copy the code from the file /usr/copy/aps105/move.t into your file ``part1.t'' and modify it to add the procedure MoveFront. Do not change any of the code from move.t.
Here is the code from /usr/copy/aps105/move.t:
type LL:
record
Name: string
Height: real
Link: pointer to LL
end record
var Head: pointer to LL
procedure GetData(FileName: string)
var FileNo: int
var NewRec, Previous: pointer to LL
open: FileNo, FileName, get
Previous := nil
Head := nil
loop
exit when eof(FileNo)
new NewRec
get: FileNo, NewRec->Name, NewRec->Height
NewRec->Link := nil
if Previous = nil then
Head := NewRec
else
Previous->Link := NewRec
end if
Previous := NewRec
end loop
end GetData
procedure PrintList
var Current: pointer to LL
Current := Head
loop
exit when Current = nil
put Current->Name, " ", Current->Height
Current := Current->Link
end loop
end PrintList
% MAIN
var FName: string
var Command: string
var MoveHeight: real
% Get the file name containing linked list data from user
put "Enter File Name: " ..
get FName
% Read Data and create Linked List
GetData(FName)
% Loop to Read Command from user
put "Commands are P (display list) M (Move To Front) and Q (quit) "
loop
put "Command: " ..
get Command
if Command = "P" or Command = "p" then
PrintList
elsif Command = "M" or Command = "m" then
put "Height of Records to be moved to front: " ..
get MoveHeight
MoveFront(MoveHeight)
elsif Command = "Q" or Command = "q" then
exit
else
put "Unknown Command, ", Command
end if
end loop