Queue/Definition: Difference between revisions

No edit summary
Line 414:
}</lang>
 
=={{header|ALGOL 68}}==
{{works with|ALGOL 68|Revision 1 - one extension to language used - PRAGMA READ - a non standard feature similar to C's #include directive.}}
{{works with|ALGOL 68G|Any - tested with release [http://sourceforge.net/projects/algol68/files/algol68g/algol68g-2.7 algol68g-2.7].}}
{{wont work with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release [http://sourceforge.net/projects/algol68/files/algol68toc/algol68toc-1.8.8d/algol68toc-1.8-8d.fc9.i386.rpm/download 1.8-8d] - due to extensive use of '''format'''[ted] ''transput''.}}
'''File: prelude/queue.a68'''<lang algol68># -*- coding: utf-8 -*- #
 
# REQUIRES:
MODE QUEUEVALUE = ~
#
 
MODE QUEUE = REF QUEUELINK;
 
MODE QUEUELINK = STRUCT(
REF QUEUELINK next,
REF QUEUELINK prev,
QUEUEVALUE value # required #
);
 
QUEUE queue empty = NIL;
 
PROC queue init = (REF QUEUE self)REF QUEUE:
self := queue empty;
 
PROC queue put = (REF QUEUE self, QUEUEVALUE value)QUEUE: (
HEAP QUEUELINK out;
IF self IS queue empty THEN
out := (out, out, value) # self referal #
ELSE # join into list #
out := (self, prev OF self, value);
prev OF self := next OF prev OF self := out
FI;
self := out
);
 
PROC queue get = (REF QUEUE self)QUEUEVALUE: (
QUEUE drop = prev OF self;
QUEUEVALUE out = value OF drop;
IF self IS drop THEN # drop solo member #
self := queue empty
ELSE # drop end member #
QUEUE end = prev OF drop;
next OF end := self;
prev OF self := end
FI;
# give a recovery hint to the garbage collector #
next OF drop := prev OF drop := queue empty;
out
);
 
PROC queue is empty = (REF QUEUE self)BOOL:
self IS queue empty;
 
SKIP</lang>'''File: test/queue.a68'''<lang algol68>#!/usr/bin/a68g --script #
# -*- coding: utf-8 -*- #
 
MODE QUEUEVALUE = STRING;
PR read "prelude/queue.a68" PR;
 
QUEUE example; queue init(example);
 
queue put(example, "Was");
queue put(example, "it");
queue put(example, "a");
queue put(example, "cat");
queue put(example, "I");
queue put(example, "saw");
 
print("Word queue:");
WHILE NOT queue is empty(example) DO
# OR example ISNT queue empty #
print((" ",queue get(example)))
OD;
print(new line)</lang>'''Output:'''
<pre>
Word queue: Was it a cat I saw
</pre>
=={{header|AWK}}==