Doubly-linked list/Traversal: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (syntax highlighting fixup automation) |
(Added XPL0 example.) |
||
Line 2,584: | Line 2,584: | ||
20 19 18 17 16 15 14 13 12 11 |
20 19 18 17 16 15 14 13 12 11 |
||
10 9 8 7 6 5 4 3 2 1 |
10 9 8 7 6 5 4 3 2 1 |
||
</pre> |
|||
=={{header|XPL0}}== |
|||
<syntaxhighlight lang "XPL0">def \Node\ Prev, Data, Next; \Element (Node) definition |
|||
def SizeofInt = 4; |
|||
proc Insert(NewNode, Node); \Insert NewNode after Node |
|||
int NewNode, Node, NextNode; |
|||
[NextNode:= Node(Next); |
|||
NextNode(Prev):= NewNode; |
|||
NewNode(Next):= NextNode; |
|||
NewNode(Prev):= Node; |
|||
Node(Next):= NewNode; |
|||
]; |
|||
int Head(3), Tail(3); \Doubly linked list definition |
|||
int N, NewNode, Node; |
|||
[\Further define (initialize) the doubly linked list |
|||
Head(Next):= Tail; |
|||
Tail(Prev):= Head; |
|||
\Insert some Nodes containing square data |
|||
for N:= 1 to 10 do |
|||
[NewNode:= Reserve(3*SizeofInt); |
|||
NewNode(Data):= N*N; |
|||
Insert(NewNode, Head); |
|||
]; |
|||
\Traverse list from Head to Tail |
|||
Node:= Head(Next); |
|||
while Node # Tail do |
|||
[IntOut(0, Node(Data)); ChOut(0, ^ ); |
|||
Node:= Node(Next); |
|||
]; |
|||
CrLf(0); |
|||
\Traverse list from Tail to Head |
|||
Node:= Tail(Prev); |
|||
while Node # Head do |
|||
[IntOut(0, Node(Data)); ChOut(0, ^ ); |
|||
Node:= Node(Prev); |
|||
]; |
|||
CrLf(0); |
|||
]</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
100 81 64 49 36 25 16 9 4 1 |
|||
1 4 9 16 25 36 49 64 81 100 |
|||
</pre> |
</pre> |
||