1 Imperative Queues

▼ |  | Data Structures

1 | Imperative Queues
2 | Skip Lists
3 | Interval Maps
4 | Growable vectors

On this page:

make-queue
enqueue!
dequeue!
queue-empty?
queue?
queue/ c
nonempty-queue/ c

Version: 5.0.1.5
top← prev up next →

### 1`` Imperative Queues

Carl Eastlund <cce@racket-lang.org>

( 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.

( enqueue! q v) → void?
q : queue/c
v : any/c

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:

( define q ( make-queue))

> ( enqueue! q 1)
> ( dequeue! q)
1
> ( enqueue! q 2)
> ( enqueue! q 3)
> ( dequeue! q)
2
> ( dequeue! q)
3

( queue-empty? q) → boolean?
q : queue/c

Recognizes whether a queue is empty or not.

Examples:

( define q ( make-queue))

> ( queue-empty? q)
#t
> ( enqueue! q 1)
> ( queue-empty? q)
#f
> ( dequeue! q)
1
> ( queue-empty? q)
#t

( queue? v) → boolean?
v : any/c

This predicate recognizes queues.

Examples:
> ( queue? ( make-queue))
#t
> ( queue? 'not-a-queue)
#f

queue/c : flat-contract?

nonempty-queue/c : flat-contract?

These contracts recognize queues; the latter requires the queue to contain at least one value.
top← prev up next →