@code{(require 'queue)}
@ftindex queue

A @dfn{queue} is a list where elements can be added to both the front
@cindex queue
and rear, and removed from the front (i.e., they are what are often
called @dfn{dequeues}).  A queue may also be used like a stack.
@cindex dequeues


@defun make-queue

Returns a new, empty queue.
@end defun


@defun queue? obj

Returns @code{#t} if @var{obj} is a queue.
@end defun


@defun queue-empty? q

Returns @code{#t} if the queue @var{q} is empty.
@end defun


@deffn {Procedure} queue-push! q datum

Adds @var{datum} to the front of queue @var{q}.
@end deffn


@deffn {Procedure} enqueue! q datum

Adds @var{datum} to the rear of queue @var{q}.
@end deffn


@deffn {Procedure} dequeue! q

@deffnx {Procedure} queue-pop! q
Both of these procedures remove and return the datum at the front of
the queue.  @code{queue-pop!} is used to suggest that the queue is
being used like a stack.
@end deffn

All of the following functions raise an error if the queue @var{q}
is empty.


@deffn {Procedure} dequeue-all! q

Removes and returns (the list) of all contents of queue @var{q}.
@end deffn


@defun queue-front q

Returns the datum at the front of the queue @var{q}.
@end defun


@defun queue-rear q

Returns the datum at the rear of the queue @var{q}.
@end defun