棧和隊列是比較基礎的數(shù)據(jù)結構。無論在工作中,還是在面試中,棧和隊列都用的比較多。在計算機的世界,你會看到隊列和棧,無處不在。
棧:一個先進后出的數(shù)據(jù)結構
隊列:一個先進先出的數(shù)據(jù)結構
棧和隊列這兩種數(shù)據(jù)結構,同時也存在某種聯(lián)系。用棧可以實現(xiàn)隊列,用隊列也可以實現(xiàn)棧。
兩個棧實現(xiàn)一個隊列
思路:讓數(shù)據(jù)入stack1,然后棧stack1中的數(shù)據(jù)出棧并入到棧stack2,然后出stack2。
代碼如下:
type CQueue struct {
stack1, stack2 *list.List
}
//構造函數(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 {
//如果第二個棧為空
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 時,先判斷 statck2 是否為空,為空則將 stack1 元素移動到 stack2 中,然后將 stack2 中的棧頂元素保存,并彈棧。
-
數(shù)據(jù)
+關注
關注
8文章
7256瀏覽量
91831 -
函數(shù)
+關注
關注
3文章
4380瀏覽量
64844 -
隊列
+關注
關注
1文章
46瀏覽量
11082
發(fā)布評論請先 登錄
入隊列與出隊列分別于兩個不同的VI如何進行數(shù)據(jù)傳輸?
你還會手寫棧和隊列嗎棧和隊列的基本實現(xiàn)程序說明
兩個接觸器如何實現(xiàn)順序啟動
兩個接觸器如何實現(xiàn)順序啟動

深入淺出了解單調(diào)棧和單調(diào)隊列

評論