棧和隊列是比較基礎的數據結構。無論在工作中,還是在面試中,棧和隊列都用的比較多。在計算機的世界,你會看到隊列和棧,無處不在。
棧:一個先進后出的數據結構
隊列:一個先進先出的數據結構
棧和隊列這兩種數據結構,同時也存在某種聯系。用棧可以實現隊列,用隊列也可以實現棧。
兩個棧實現一個隊列
思路:讓數據入stack1,然后棧stack1中的數據出棧并入到棧stack2,然后出stack2。
代碼如下:
type CQueue struct {
stack1, stack2 *list.List
}
//構造函數
func Constructor() CQueue {
return CQueue{
stack1: list.New(),
stack2: list.New(),
}
}
//尾部插入
func (this *CQueue) AppendTail(value int) {
this.stack1.PushBack(value)
}
//頭部刪除,back函數返回其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
}
先調用 AppendTail 函數將所有元素插入 stack1,在調用 DeleteHead 函數將 stack1 中的元素轉移到 stack2 中,再將元素再出棧。
再調用 DeleteHead 時,先判斷 statck2 是否為空,為空則將 stack1 元素移動到 stack2 中,然后將 stack2 中的棧頂元素保存,并彈棧。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
數據
+關注
關注
8文章
7002瀏覽量
88941 -
函數
+關注
關注
3文章
4327瀏覽量
62569 -
隊列
+關注
關注
1文章
46瀏覽量
10893
發布評論請先 登錄
相關推薦
TencentOS-tiny中環形隊列的實現
1. 什么是隊列隊列(queue)是一種只能在一端插入元素、在另一端刪除元素的數據結構,遵循「先入先出」(FIFO)的規則。 隊列中有
stm32單片機如何實現一個按鍵切換兩個程序?
stm32單片機如何實現一個按鍵切換兩個程序? 作為一款功能強大的微控制器,STM32單片機可以支持多種應用場景,其中
兩個硬盤2個系統開機切換
準備、系統安裝、系統切換和注意事項。 一、硬件準備 在開始之前,我們首先要確保我們有兩個可用的硬盤,每個硬盤上都可以安裝一個操作系統。我們建議使用兩
評論