Version: 5.1
1 Imperative Queues
(require data/queue) |
This module provides a simple mutable queue representation, first-in/first-out only. Operations on queues mutate it in a thread-unsafe way.
(make-queue) → queue/c |
Produces an empty queue.
Adds an element to the back of a queue.
(dequeue! q) → any/c |
q : nonempty-queue/c |
Removes an element from the front of a nonempty queue, and returns that
element.
Examples: | ||
| ||
> (enqueue! q 1) | ||
> (dequeue! q) | ||
1 | ||
> (enqueue! q 2) | ||
> (enqueue! q 3) | ||
> (dequeue! q) | ||
2 | ||
> (dequeue! q) | ||
3 |
(queue->list queue) → (listof any/c) |
queue : queue/c |
Returns an immutable list containing the elements of the queue
in the order the elements were added.
Examples: | ||
| ||
> (enqueue! queue 8) | ||
> (enqueue! queue 9) | ||
> (enqueue! queue 0) | ||
> (queue->list queue) | ||
'(8 9 0) |
(queue-length queue) → integer? |
queue : queue/c |
Returns the number of elements in the queue.
Examples: | ||
| ||
> (queue-length queue) | ||
0 | ||
> (enqueue! queue 5) | ||
> (enqueue! queue 12) | ||
> (queue-length queue) | ||
2 | ||
> (dequeue! queue) | ||
5 | ||
> (queue-length queue) | ||
1 |
(queue-empty? q) → boolean? |
q : queue/c |
Recognizes whether a queue is empty or not.
Examples: | ||
| ||
> (queue-empty? q) | ||
#t | ||
> (enqueue! q 1) | ||
> (queue-empty? q) | ||
#f | ||
> (dequeue! q) | ||
1 | ||
> (queue-empty? q) | ||
#t |
This predicate recognizes queues.
Examples: |
> (queue? (make-queue)) |
#t |
> (queue? 'not-a-queue) |
#f |
Returns a sequence whose elements are the elements of
queue.
These contracts recognize queues; the latter requires the queue to
contain at least one value.