Circular linked list help
Author |
Message |
imbored
|
Posted: Fri Jan 01, 2010 5:10 pm Post subject: Circular linked list help |
|
|
What is it you are trying to achieve?
make a circular linked list. and make the delete procedure stop when there is only one item left in the list. I am suppose to make it a circular linked list that holds the user input and then afterwards delete some until one is left. Also a backup of the list is needed of the original inputs. and when the program is finish running, it would display the original inputs and the one last remaining input.
but mainly i am trying to get it as a circular linked list.
ps: if it is circular does that means it loops over and over again from the top to the bottom and back to top. how do i stop it from going to infinite loop when i am deleting and displaying.
What is the problem you are having?
i dont understand how to link the ending of the linked list back at top.
Describe what you have tried to solve this problem
read guides and stuff. this code is just an edited version of a code in the guide.
Post any relevant code (You may choose to attach the file instead of posting the code if it is too long)
Turing: |
type labelType :
record
name : string (20)
link : int
end record
const null := 0
const maxLabels := 100
var labels : array 1 .. maxLabels of labelType
var first := null
var vacant : int := 1
for i : 1 .. maxLabels - 1
labels (i ).link := i + 1
end for
procedure insert (newLabel : labelType )
assert vacant not= null
var spot := vacant
vacant := labels (vacant ).link
labels (spot ).name := newLabel.name
if first = null or newLabel.name < labels (first ).name then
labels (spot ).link := first
first := spot
else
var previous := first
var next := labels (first ).link
loop
exit when next = null or
newLabel.name < labels (next ).name
previous := next
next := labels (next ).link
end loop
labels (previous ).link := spot
labels (spot ).link := next
end if
end insert
procedure delete (oldLabel : labelType )
var old : int := first
var previous : int
loop
exit when old = null or labels (old ).name = oldLabel.name
previous := old
old := labels (old ).link
end loop
if old = null then
put oldLabel.name, "not found"
return
elsif first = old then
first := labels (old ).link
else
labels (previous ).link := labels (old ).link
end if
labels (old ).link := vacant
vacant := old
end delete
procedure outputList
var current := first
loop
exit when current = null
put labels (current ).name : 20
current := labels (current ).link
end loop
end outputList
var newLabel, oldLabel : labelType
loop
put "Enter name of label to be instered"
get newLabel.name
exit when (newLabel.name = 'fin') or (newLabel.name = 'Fin')
insert (newLabel )
end loop
cls
outputList
loop
put "Enter name of record to be deleted"
get oldLabel.name
exit when oldLabel.name = 'no'
delete (oldLabel )
end loop
put "The remaining survivors are:"
outputList
|
Edit: i got the backup working. i just made a new procedure called backup with the same code as insert and put into a new array. but i notice one thing that is not working as i thought. you cannot put first and last name at one time because it counts it as two names. (labels) and thats not good... |
|
|
|
|
 |
Sponsor Sponsor

|
|
 |
andrew.
|
Posted: Mon Jan 04, 2010 9:06 pm Post subject: RE:Circular linked list help |
|
|
Can't you put "get newLabel.name : *"? It should take in the spaces and everything up until 20 characters (because you set it to that). I haven't tried it though, but it should work. |
|
|
|
|
 |
imbored
|
Posted: Mon Jan 04, 2010 9:29 pm Post subject: RE:Circular linked list help |
|
|
yea i fixed that now thats why i opened a new thread because i totally re-programmed because this program is confusing for me. |
|
|
|
|
 |
|
|