var PointerType
: collection of
record
Data
: string (40)
Next
: pointer to PointerType
Prev
: pointer to PointerType
end record
var Backup
: collection of
record
Data
: string (40)
Next
: pointer to Backup
Prev
: pointer to Backup
end record
%------------------- procedure---------------------------------------
procedure First
(var InsertRecord, ListStart, ListEnd
: pointer to PointerType, spNames
: string)
new InsertRecord
ListEnd
:= InsertRecord
^InsertRecord.Next
:= nil
^InsertRecord.Data
:= spNames
ListStart
:= InsertRecord
end First
procedure bFirst
(var bIRecord, bListStart, bListEnd
: pointer to Backup, spNames
: string)
new bIRecord
bListEnd
:= bIRecord
^bIRecord.Next
:= nil
^bIRecord.Data
:= spNames
bListStart
:= bIRecord
end bFirst
procedure InName
(var InsertRecord, ListStart, ListEnd
: pointer to PointerType, spName
: string,
var ipAm
: int)
new InsertRecord
^InsertRecord.Next
:= ListStart
^ListStart.Prev
:= InsertRecord
^InsertRecord.Data
:= spName
ListStart
:= InsertRecord
ipAm +
= 1
end InName
procedure bInName
(var bIRecord, bListStart, bListEnd
: pointer to Backup, spName
: string)
new bIRecord
^bIRecord.Next
:= bListStart
^bListStart.Prev
:= bIRecord
^bIRecord.Data
:= spName
bListStart
:= bIRecord
end bInName
procedure Circular
(var InsertRecord, ListStart, ListEnd
: pointer to PointerType
)
InsertRecord
:= ListEnd
end Circular
procedure OutName
(ListEnd
: pointer to PointerType, ipAm
: int)
var i
: int := 0
var TempList
:= ListEnd
loop
i +
= 1
put ^TempList.Data
exit when i
= ipAm
TempList
:= ^TempList.Prev
end loop
end OutName
procedure bOutName
(bListEnd
: pointer to Backup, ipAm
: int)
var i
: int := 0
var TempList
:= bListEnd
loop
i +
= 1
put ^TempList.Data
exit when i
= ipAm
TempList
:= ^TempList.Prev
end loop
end bOutName
%----------------------- main----------------------------------------
var InsertRecord, ListStart, ListEnd
: pointer to PointerType
var bIRecord, bListStart, bListEnd
: pointer to Backup
var sNames
: string
var iAm
: int := 1
var iAm2
: int := 1
put "Input the name of a contestant"
get sNames
: *
First
(InsertRecord, ListStart, ListEnd, sNames
)
bFirst
(bIRecord, bListStart, bListEnd, sNames
)
if (sNames
= 'Fin') or (sNames
= 'fin') then
%nothing
else
loop
put "Input the name of a contestant"
get sNames
: *
exit when (sNames
= 'fin') or (sNames
= 'Fin')
InName
(InsertRecord, ListStart, ListEnd, sNames, iAm
)
bInName
(bIRecord, bListStart, bListEnd, sNames
)
end loop
end if
Circular
(InsertRecord, ListStart, ListEnd
)
cls
iAm2
:= iAm
put "List: "
OutName
(ListEnd, iAm
)
put "Which Contestant do you want to elliminate?"
get sNames
%delete
put "Backup : "
bOutName
(bListEnd, iAm2
)
put "Remaining: "
OutName
(ListEnd, iAm
)