(** Adds an element to the back of the queue, returning the new queue. Runs in O(1). *)
valenqueue:'a->'aqueue->'aqueue
(** Removes an element from the front of the queue, returning a tuple of the new queue and an option which is None if the queue is empty, or Some [x] where [x] wa the element on the front of the queue. Runs in best case O(1), worse case O(n) and amortized O(1). *)