1. 程式人生 > >數據結構《20》----Immutable stack

數據結構《20》----Immutable stack

插入元素 ctr data- fcm 結構 疑惑 true 插入 前驅

有趣的函數式數據結構《一》----不可變棧

什麽是不可變?往棧中插入一個元素,原來的棧保持不變,返回一個新的棧(已插入新的元素)。

push, pop,getMax 等操作都要求在 常數時間內完畢。


可能讀者會產生疑惑,既然要返回一個新的棧,是不是就必須先拷貝一份原來的棧,然後在新的棧中插入元素。

可是這樣復雜度就是線性的,怎樣可以在常數時間內完畢呢??

這裏。就是immutable DATA STRUCTRUE 的強大。。


本文給出一個C++ 的實現版本號,基本理想是利用內存共享,以及均攤時間的思想。

下圖給出了實現的核心思想。

三個鏈表[1,2,3], [1,2,4], [1,2,5]共用節點1,2

這是由於一個節點能夠有多個前驅節點指向它本身。。而棧的特性:只在鏈表的頭部插入刪除的性質保證了節點的共享。


技術分享



數據結構《20》----Immutable stack