/- Copyright (c) 2019 Microsoft Corporation. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Daniel Selsam Simple queue implemented using two lists. Note: this is only a temporary placeholder. -/ prelude import init.data.array import init.data.int universes u v w structure Queue (α : Type u) := (eList dList : List α := []) namespace Queue variable {α : Type u} def enqueue (v : α) (q : Queue α) : Queue α := { eList := v::q.eList .. q } def enqueueAll (vs : List α) (q : Queue α) : Queue α := { eList := vs ++ q.eList .. q } def isEmpty (q : Queue α) : Bool := q.dList.isEmpty && q.eList.isEmpty def dequeue? (q : Queue α) : Option (α × Queue α) := match q.dList with | d::ds => some (d, { dList := ds, .. q }) | [] => match q.eList.reverse with | [] => none | d::ds => some (d, { eList := [], dList := ds }) end Queue