Created
June 6, 2018 16:37
-
-
Save skalahonza/0998aef46cd8a688a966acc5b8432c9f to your computer and use it in GitHub Desktop.
Queue implementation in haskell using 2 stacks.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module QueueStacks where | |
type Stack v = [v] | |
push :: v -> Stack v -> Stack v | |
push value stack = value:stack | |
pop :: Stack v -> Stack v | |
pop [] = [] | |
pop (_:newStack) = newStack | |
data Queue v = InStackOutStack (Stack v) (Stack v) deriving (Eq, Show) | |
enqueue :: v -> Queue v -> Queue v | |
enqueue tmp (InStackOutStack ins out) = (InStackOutStack (push tmp ins) out) | |
dequeue :: Queue v -> Queue v | |
dequeue q = dequeueDisp (dispatch q) | |
dequeueDisp (InStackOutStack ins out) = (InStackOutStack ins (pop out)) | |
dispatch :: Queue v -> Queue v | |
dispatch (InStackOutStack [] []) = (InStackOutStack [] []) | |
dispatch (InStackOutStack ins []) = (InStackOutStack [] (reverse ins)) | |
dispatch (InStackOutStack ins out) = (InStackOutStack ins out) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment