41 lines
1.1 KiB
Plaintext
41 lines
1.1 KiB
Plaintext
test: proc options (main);
|
|
|
|
|
|
/* To implement a queue. */
|
|
define structure
|
|
1 node,
|
|
2 value fixed,
|
|
2 link handle(node);
|
|
declare (head, tail, t) handle (node);
|
|
declare null builtin;
|
|
declare i fixed binary;
|
|
|
|
head, tail = bind(:node, null:);
|
|
|
|
do i = 1 to 10; /* Add ten items to the tail of the queue. */
|
|
if head = bind(:node, null:) then
|
|
do;
|
|
head,tail = new(:node:);
|
|
get list (head => value);
|
|
put skip list (head => value);
|
|
head => link = bind(:node, null:); /* A NULL link */
|
|
end;
|
|
else
|
|
do;
|
|
t = new(:node:);
|
|
tail => link = t; /* Point the tail to the new node. */
|
|
tail = t;
|
|
tail => link = bind(:node, null:); /* Set the tail link to NULL */
|
|
get list (tail => value) copy;
|
|
put skip list (tail => value);
|
|
end;
|
|
end;
|
|
|
|
/* Pop all the items in the queue. */
|
|
put skip list ('The queue has:');
|
|
do while (head ^= bind(:node, null:));
|
|
put skip list (head => value);
|
|
head = head => link;
|
|
end;
|
|
end test;
|