1. 程式人生 > >佇列,雙端佇列

佇列,雙端佇列

我的宗旨就是不打一行程式碼,哼.

佇列就是先進先出,不多講,想弄清楚的自行百度,但看我接下來的文字你並不需要知道那麼多.

好了,前面我們講到了順序表也就是列表了,那我們用列表能否實現呢?毫無疑問是可以實現的,但是要拿列表實現佇列需要insert()和pop(),前面一篇文章講到了,使用insert()的操作是極其差的,即我們首先就得把它給拋棄掉,一定有更牛逼的方法.

那我們的連結串列能否實現呢?如果使用append()和popleft(),而append和popleff又都是O(1)的操作,完美解決.

好了,這裡補充一個數組實現(陣列相當於定長的列表,實在不懂跳過),陣列能否實現呢?是可以實現的,但是陣列其實是比較麻煩的,陣列只有push和pop操作,我們只需要把值push後再往右移動他的下標個位置,而pop後再往做移動下標個位置,那麼也是完美實現了,但是有可能array_size(這裡你不能反映就是你不懂,跳過把)給的過大了,那麼下標位置就得考慮了,這個時候可以使用取模,即使用元組的元素的個數+下標位置對array_size取模,也就是拿一串又一串數字在一個很長的容器裡左右移動.

好了,這裡繼續補充一個雙端佇列,雙端佇列的意思是頭和尾都能實現先進先出,這個時候不得不用到雙端佇列,雙端佇列基於雙鏈表,只不過他把頭部和尾部連在一起形成了雙端連結串列,好了知道了雙端連結串列,就可以實現雙端隊列了.不多講了,你只需要知道有雙端佇列,雙端佇列由雙端連結串列實現.

就這樣就可以了.你非要問程式碼實現,import cllections import deque ,看原始碼一定寫的比我好.