話說大學的時候老師說妹子比工作重要~,工作可以再換,妹子這個。。。所以。。。這兩個月也就一直忙著fall in love,嗨,慢慢調整心態吧,
這篇就選乙個簡單的資料結構聊一聊,話說有很多資料結構都在玩組合拳,比如說:塊狀鍊錶,塊狀陣列,當然還有本篇的雙端佇列,是的,它就是
棧和佇列的組合體。
一:概念
我們知道普通佇列是限制級的一端進,另一端出的fifo形式,棧是一端進出的lifo形式,而雙端佇列就沒有這樣的限制級,也就是我們可以在
佇列兩端進行插入或者刪除操作。
二:編碼
1:定義結構體
通常情況下,佇列的內部都是採用陣列來實現,而且帶有兩個指標head和tail來指向陣列的區間段,為了充分利用陣列空間,我們也會用%來實
現邏輯上的迴圈陣列,如下圖。
這裡有乙個注意的細節就是「size欄位「,它是為了方便統計佇列是否為滿或者佇列是否為空。
2:隊尾入隊
剛才也說了,雙端佇列是可以在佇列的兩端進行插入和刪除的,要注意的是我們用head和tail指標的時候,tail指標是指向元素的下乙個位置,
而head指標是指向當前元素,所以我們可以從tail端push資料的時候只要」順時針「下移乙個位置即可。
13:隊尾出隊///2
///隊尾入隊
3///
4///
5///
6public
bool
push_tail(t t)
7
和隊尾入隊一樣,我們只要將tail指標」逆時針「下移乙個位置,當然有乙個細節需要注意,就是tail指標有存在負值的情況,畢竟我們是做」--操作「的,
所以需要tail+maxsize,即:myqueue.tail = (--myqueue.tail + myqueue.maxsize) % myqueue.maxsize;
14:隊首入隊///2
///隊尾出隊
3///
4///
5///
6public
t pop_tail()
7
從head端來說,我們push資料的時候是head指標「逆時針」旋轉,要注意的是同樣要防止負數的產生,並且head指標是指向當前元素。
15:隊首出隊///2
///隊首入隊
3///
4///
5///
6public
bool
push_head(t t)
7
說到這個方法,我想大家應該都懂了雙端佇列的大概流程了,這個方法我也不用贅敘了。
1從上面的四個方法可以看出:///2
///隊首出隊
3///
4///
5///
6public
t pop_head()
7
當我們只使用push_tail和pop_tail的話,那它就是棧。
當我們只使用push_tail和pop_head的話,那它就是佇列。
最後是全部**:
view code
1using
system.net;
2using
system;
3using
system.io;
4using
system.collections.generic;
5using
system.text;
6using
system.drawing;
7using
system.drawing.imaging;89
class
program
1036}37
38///
39///
雙端佇列
40///
41public
class doublequeue4261}
6263 myqueue myqueue = new
myqueue();
6465
///66
///隊尾入隊
67///
68///
69///
70public
bool
push_tail(t t)
7185
86///
87///
隊尾出隊
88///
89///
90///
91public
t pop_tail()
92109
110///
111///
隊首入隊
112///
113///
114///
115public
bool
push_head(t t)
116131
132///
133///
隊首出隊
134///
135///
136///
137public
t pop_head()
138156 }
經典演算法題每日演練 第十二題 線段樹
這一篇我們來看樹狀陣列的加強版線段樹,樹狀陣列能玩的線段樹一樣可以玩,而且能玩的更好,他們在區間求和,最大,平均 等經典的rmq問題上有著對數時間的優越表現。一 線段樹 線段樹又稱 區間樹 在每個節點上儲存乙個區間,當然區間的劃分採用折半的思想,葉子節點只儲存乙個值,也叫單元節點,所 以最終的構造就...
程式設計第十九題 手機短號
大家都知道,手機號是乙個11位長的數字串,同時,作為學生,還可以申 入校園網,如果加入成功,你將另外擁有乙個短號。假設所有的短號都是是 6 手機號的後5位,比如號碼為13512345678的手機,對應的短號就是645678。現在,如果給你乙個11位長的手機號碼,你能找出對應的短號嗎?輸入資料的第一行...
經典演算法題每日演練 第七題 KMP演算法
在大學的時候,應該在資料結構裡面都看過kmp演算法吧,不知道有多少老師對該演算法是一筆帶過的,至少我們以前是的,確實kmp演算法還是有點饒人的,如果說紅黑樹是 級的,那麼kmp演算法比紅黑樹還要 很抱歉,每次打kmp的時候,輸 入法總是提示 看毛片 三個字,嘿嘿,就叫 看毛片演算法 吧。一 bf演算...