Queue/Definition: Difference between revisions
Content added Content deleted
Drkameleon (talk | contribs) (obsolete) |
(Removed "import queues" as module no longer exists. Added description of queue and basic operations. Added try..except when popping from empty queue.) |
||
Line 3,626: | Line 3,626: | ||
=={{header|Nim}}== |
=={{header|Nim}}== |
||
<lang nim> |
<lang nim>type |
||
Node[T] = ref object |
|||
# defining push & pop (obviously optional) |
|||
value: T |
|||
⚫ | |||
next: Node[T] |
|||
⚫ | |||
result = dequeue(q) |
|||
Queue*[T] = object |
|||
⚫ | |||
head, tail: Node[T] |
|||
length: Natural |
|||
func initQueue*[T](): Queue[T] = Queue[T]() |
|||
func len*(queue: Queue): Natural = |
|||
queue.length |
|||
func isEmpty*(queue: Queue): bool {.inline.} = |
|||
queue.len == 0 |
|||
⚫ | |||
let node = Node[T](value: value, next: nil) |
|||
if queue.isEmpty: queue.head = node |
|||
else: queue.tail.next = node |
|||
queue.tail = node |
|||
inc queue.length |
|||
⚫ | |||
if queue.isEmpty: |
|||
raise newException(ValueError, "popping from empty queue.") |
|||
result = queue.head.value |
|||
queue.head = queue.head.next |
|||
dec queue.length |
|||
if queue.isEmpty: queue.tail = nil |
|||
⚫ | |||
fifo.push(26) |
fifo.push(26) |
||
fifo.push(99) |
fifo.push(99) |
||
fifo.push(2) |
fifo.push(2) |
||
echo |
echo "Fifo size: ", fifo.len() |
||
echo |
echo "Popping: ", fifo.pop() |
||
echo |
echo "Popping: ", fifo.pop() |
||
echo |
echo "Popping: ", fifo.pop() |
||
try: |
|||
#echo("Popping: ", fifo.pop()) # popping an empty stack raises [EAssertionFailed]</lang> |
|||
echo "Popping: ", fifo.pop() |
|||
except ValueError: |
|||
echo "Exception catched: ", getCurrentExceptionMsg()</lang> |
|||
{{out}} |
{{out}} |
||
<pre>Fifo size: 3 |
<pre>Fifo size: 3 |
||
Popping: 26 |
Popping: 26 |
||
Popping: 99 |
Popping: 99 |
||
Popping: 2 |
Popping: 2 |
||
Exception catched: popping from empty queue.</pre> |
|||
=={{header|OCaml}}== |
=={{header|OCaml}}== |