棧和隊(duì)列是比較基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)。無論在工作中,還是在面試中,棧和隊(duì)列都用的比較多。在計(jì)算機(jī)的世界,你會(huì)看到隊(duì)列和棧,無處不在。
棧:一個(gè)先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)
隊(duì)列:一個(gè)先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)
棧和隊(duì)列這兩種數(shù)據(jù)結(jié)構(gòu),同時(shí)也存在某種聯(lián)系。用棧可以實(shí)現(xiàn)隊(duì)列,用隊(duì)列也可以實(shí)現(xiàn)棧。
兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列
思路:讓數(shù)據(jù)入stack1,然后棧stack1中的數(shù)據(jù)出棧并入到棧stack2,然后出stack2。
代碼如下:
type CQueue struct {
stack1, stack2 *list.List
}
//構(gòu)造函數(shù)
func Constructor() CQueue {
return CQueue{
stack1: list.New(),
stack2: list.New(),
}
}
//尾部插入
func (this *CQueue) AppendTail(value int) {
this.stack1.PushBack(value)
}
//頭部刪除,back函數(shù)返回其list最尾部的值
func (this *CQueue) DeleteHead() int {
//如果第二個(gè)棧為空
if this.stack2.Len() == 0 {
for this.stack1.Len() > 0 {
this.stack2.PushBack(this.stack1.Remove(this.stack1.Back()))
}
}
if this.stack2.Len() != 0 {
e := this.stack2.Back()
this.stack2.Remove(e)
return e.Value.(int)
}
return -1
}
先調(diào)用 AppendTail 函數(shù)將所有元素插入 stack1,在調(diào)用 DeleteHead 函數(shù)將 stack1 中的元素轉(zhuǎn)移到 stack2 中,再將元素再出棧。
再調(diào)用 DeleteHead 時(shí),先判斷 statck2 是否為空,為空則將 stack1 元素移動(dòng)到 stack2 中,然后將 stack2 中的棧頂元素保存,并彈棧。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7139瀏覽量
89569 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4346瀏覽量
62968 -
隊(duì)列
+關(guān)注
關(guān)注
1文章
46瀏覽量
10927
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
入隊(duì)列與出隊(duì)列分別于兩個(gè)不同的VI如何進(jìn)行數(shù)據(jù)傳輸?
你還會(huì)手寫棧和隊(duì)列嗎棧和隊(duì)列的基本實(shí)現(xiàn)程序說明
兩個(gè)接觸器如何實(shí)現(xiàn)順序啟動(dòng)
兩個(gè)接觸器如何實(shí)現(xiàn)順序啟動(dòng)
![<b class='flag-5'>兩個(gè)</b>接觸器如何<b class='flag-5'>實(shí)現(xiàn)</b>順序啟動(dòng)](https://file.elecfans.com/web1/M00/B3/AC/o4YBAF5C87uAStfmAAJU8_L41vk085.png)
深入淺出了解單調(diào)棧和單調(diào)隊(duì)列
![深入淺出了解單調(diào)<b class='flag-5'>棧</b>和單調(diào)<b class='flag-5'>隊(duì)列</b>](https://file.elecfans.com/web1/M00/DE/5A/pIYBAGAYtu6ALS5eAAEYBOnvmdI742.png)
兩個(gè)S7-200-PLC之間Modbus通訊實(shí)現(xiàn)(從站)
隊(duì)列實(shí)現(xiàn)棧原理是什么?隊(duì)列實(shí)現(xiàn)棧方案有哪幾種?
![<b class='flag-5'>隊(duì)列</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>棧</b>原理是什么?<b class='flag-5'>隊(duì)列</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>棧</b>方案有哪幾種?](https://file.elecfans.com/web2/M00/05/97/pYYBAGDhSEyAdw4iAAASk34tfNs779.jpg)
TencentOS-tiny中環(huán)形隊(duì)列的實(shí)現(xiàn)
一個(gè)寬帶如何裝兩個(gè)路由器
兩個(gè)LED和兩個(gè)按鈕的使用
![<b class='flag-5'>兩個(gè)</b>LED和<b class='flag-5'>兩個(gè)</b>按鈕的使用](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論