[Haskell] Queue

1. 列表表示

module Queue(Queue,emptyQueue,queueEmpty,enqueue,dequeue,front) where 

newtype Queue a = Q [a]
    deriving Show 

emptyQueue :: Queue a 
emptyQueue = Q []

queueEmpty :: Queue a -> Bool
queueEmpty (Q []) = True 
queueEmpty (Q _) = False

enqueue :: a -> Queue a -> Queue a 
enqueue x (Q q) = Q (q ++ [x])

dequeue :: Queue a -> Queue a 
dequeue (Q (_:xs)) = Q xs 
dequeue (Q []) = error "dequeue: empty queue"

front :: Queue a -> a 
front (Q (x:_)) = x
front (Q []) = error "front: empty queue"

2. 使用兩個(gè)列表

module Queue(Queue,emptyQueue,queueEmpty,enqueue,dequeue,front) where 

newtype Queue a = Q ([a], [a])

emptyQueue :: Queue a 
emptyQueue = Q ([], [])

queueEmpty :: Queue a -> Bool
queueEmpty (Q ([], [])) = True 
queueEmpty _ = False

enqueue :: a -> Queue a -> Queue a 
enqueue x (Q ([], [])) = Q ([x], [])
enqueue y (Q (xs, ys)) = Q (xs, y:ys)

dequeue :: Queue a -> Queue a 
dequeue (Q ([], [])) = error "dequeue: empty queue"
dequeue (Q ([], ys)) = Q (tail $ reverse ys, [])
dequeue (Q (x:xs, ys)) = Q (xs, ys)

front :: Queue a -> a 
front (Q ([], [])) = error "front: empty queue"
front (Q ([], ys)) = last ys
front (Q (x:xs, ys)) = x

instance (Show a) => Show (Queue a) where 
    showsPrec p (Q (front, rear)) str = 
        showString "Q " (showList (front ++ reverse rear) str)

參考

Algorithms: A Functional Programming Approach

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 人的一生有很多個(gè)感覺(jué)好極了 也會(huì)經(jīng)歷很多感覺(jué)糟透了 不過(guò)其實(shí),這些都沒(méi)什么,不用看得很重 很多年以后,當(dāng)你回憶過(guò)去...
    孔慶芬閱讀 1,262評(píng)論 0 2
  • 喏~你們要的“仙女”神器 牙白整個(gè)人都自信了,也愛(ài)笑了。每天被人夸也是美美的,不僅白還發(fā)亮 做了一段時(shí)間小白鼠,終...
    瑤三歲_7481閱讀 267評(píng)論 0 0
  • 在經(jīng)歷了直銷模式和電商的接連打擊之后,中國(guó)的零售行業(yè)該何去何從呢? 這里首先對(duì)直銷和電商進(jìn)行一點(diǎn)介紹: 直銷:顧名...
    家和萬(wàn)事亨閱讀 316評(píng)論 0 1
  • 很慶幸心理學(xué)會(huì)有這樣的沙龍,幫助更多的人去成長(zhǎng)學(xué)習(xí)。 不同的人分享關(guān)于情感、婚姻的內(nèi)容,讓我感慨于遇到...
    雨山Joan閱讀 231評(píng)論 0 0

友情鏈接更多精彩內(nèi)容