RosettaCodeData/Task/Queue-Usage/PL-I/queue-usage-1.pli

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;