A functional queue data structure, using two back-to-back lists.
If we think of the queue as having elements pushed on the front and
popped from the back, then the queue itself is effectively eList ++ dList.reverse.
- eList : List α
The enqueue list, which stores elements that have just been pushed (with the most recently enqueued elements at the head).
- dList : List α
The dequeue list, which buffers elements ready to be dequeued (with the head being the next item to be yielded by
dequeue?).
Instances For
O(1). The empty queue.
Instances For
Equations
- Std.Queue.instEmptyCollection = { emptyCollection := Std.Queue.empty }
Equations
- Std.Queue.instInhabited = { default := ∅ }
O(1). Push an element on the front of the queue.
Equations
- Std.Queue.enqueue v q = { eList := v :: q.eList, dList := q.dList }