diff options
Diffstat (limited to 'lib/Queue.ck')
| -rw-r--r-- | lib/Queue.ck | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/Queue.ck b/lib/Queue.ck new file mode 100644 index 0000000..f05ae5e --- /dev/null +++ b/lib/Queue.ck @@ -0,0 +1,48 @@ +/* + * Queue data structure + */ +public class Queue { + class Element { + Element @next; + Object @payload; + } + Element head @=> Element @tail; + + fun void + push(Object @data) + { + new Element @=> tail.next @=> tail; + data @=> tail.payload; + } + + fun Object @ + peek() + { + if (head.next == null) + /* empty */ + return null; + else + return head.next.payload; + } + + fun Object @ + pop() + { + head.next @=> Element @el; + if (el == null) + /* empty */ + return null; + + el.next @=> head.next; + if (el == tail) + /* but now it's empty! */ + head @=> tail; + return el.payload; + } + + fun void + flush() + { + while (pop() != null); + } +} |
