The Queue structure provides an imperative queue data structure,
which are implemented as a pair of stacks (lists) representing the
front and rear of the queue. Single-threaded enqueuing and
dequeuing operations will have amortized constant time.
Synopsis
signature QUEUE
structure Queue :> QUEUE
Interface
type 'a queue
exception Dequeue
val mkQueue : unit -> 'a queue
val clear : 'a queue -> unit
val isEmpty : 'a queue -> bool
val enqueue : 'a queue * 'a -> unit
val dequeue : 'a queue -> 'a
val next : 'a queue -> 'a option
val delete : ('a queue * ('a -> bool)) -> unit
val head : 'a queue -> 'a
val peek : 'a queue -> 'a option
val length : 'a queue -> int
val contents : 'a queue -> 'a list
val app : ('a -> unit) -> 'a queue -> unit
val map : ('a -> 'b) -> 'a queue -> 'b queue
val foldl : ('a * 'b -> 'b) -> 'b -> 'a queue -> 'b
val foldr : ('a * 'b -> 'b) -> 'b -> 'a queue -> 'b
Description
type 'a queue-
The type constructor for queues.
exception Dequeue-
This exceptions is raised when the
dequeuefunction is applied to an empty queue. val mkQueue : unit -> 'a queue-
mkQueue ()returns a new empty queue. val clear : 'a queue -> unit-
clear qremoves any elements fromqleaving it empty. val isEmpty : 'a queue -> bool-
ifEmpty qreturns true if the queue is empty. val enqueue : 'a queue * 'a -> unit-
enqueue (q, x)addsxto the end ofq. val dequeue : 'a queue -> 'a-
dequeue qremoves and returns the first element inq. This function raises theDequeueexception if it is called on an empty queue. val next : 'a queue -> 'a option-
next qreturnsSOME xand removesxfromq, wherexwas the first element inq, orNONEifqis empty. val delete : ('a queue * ('a -> bool)) -> unit-
delete (q, pred)removes those items fromqfor which the functionpredreturnstrue. val head : 'a queue -> 'a-
head qreturns the first element ofqor raises the exceptionDequeueifqis empty. The queue is unchanged. val peek : 'a queue -> 'a option-
peek qreturnsSOME x, wherexis the first element ofq, orNONEifqis empty. The queue is unchanged. val length : 'a queue -> int-
length qreturns the number of elements in the queue. val contents : 'a queue -> 'a list-
contents qreturns the contents ofqas a list. val app : ('a -> unit) -> 'a queue -> unit-
app f qapplies the functionfto the elements ofq. This expression is equivalent toList.app f (contents q) val map : ('a -> 'b) -> 'a queue -> 'b queue-
map f qreturns a new queue that results from mapping the functionfacross the elements of the queue. val foldl : ('a * 'b -> 'b) -> 'b -> 'a queue -> 'b-
foldl f init qfolds the functionfover the elements ofqfrom front to back. This expression is equivalent toList.foldl f init (contents q) val foldr : ('a * 'b -> 'b) -> 'b -> 'a queue -> 'b-
foldr f init qfolds the functionfover the elements ofqfrom back to front. This expression is equivalent toList.foldr f init (contents q)