兩個隊列實現一個棧
思路:兩個隊列實現一個棧,使用了隊列交換的思想。
代碼如下:
type MyStack struct {
queue1, queue2 []int
}
//構造函數
func Constructor() (s MyStack) {
return
}
func (s *MyStack) Push(x int) {
s.queue2 = append(s.queue2, x)
for len(s.queue1) > 0 {
s.queue2 = append(s.queue2, s.queue1[0])
s.queue1 = s.queue1[1:]
}
s.queue1, s.queue2 = s.queue2, s.queue1
}
func (s *MyStack) Pop() int {
v := s.queue1[0]
s.queue1 = s.queue1[1:]
return v
}
func (s *MyStack) Top() int {
return s.queue1[0]
}
func (s *MyStack) Empty() bool {
return len(s.queue1) == 0
}
先將元素入對到 queue2,此時 queue1 為0,交換 queue2 和 queue1。此時 queue2 為0,queue1 中有1個元素。
再執行push操作時,len(queue1) > 0,此時再把 queue1 中的元素插入queue2 的尾部,然后將 queue2 和 queue1 進行交換。
此時相當于,插入 queue2 的兩個元素的位置發生了交換并保存在 queue1中。最后將 queue1 中的元素出隊,這樣就可以保證后插入的元素先出。
不斷執行 push 操作就行。
一個隊列實現一個棧
思路:使用一個隊列時,將當前插入元素前面的所有元素,先出隊再入隊即可。
代碼如下:
type MyStack struct {
queue []int
}
func Constructor() (s MyStack) {
return
}
func (s *MyStack) Push(x int) {
n := len(s.queue)
s.queue = append(s.queue, x)
for ; n > 0; n-- {
s.queue = append(s.queue, s.queue[0])
s.queue = s.queue[1:]
}
}
func (s *MyStack) Pop() int {
v := s.queue[0]
s.queue = s.queue[1:]
return v
}
func (s *MyStack) Top() int {
return s.queue[0]
}
func (s *MyStack) Empty() bool {
return len(s.queue) == 0
}
每次執行 push 操作,如果queue存在元素,則將新插入元素前的所有元素出隊,然后依次進隊。這樣新插入的元素就在隊首了。
-
計算機
+關注
關注
19文章
7536瀏覽量
88638 -
數據結構
+關注
關注
3文章
573瀏覽量
40230 -
隊列
+關注
關注
1文章
46瀏覽量
10927
發布評論請先 登錄
相關推薦
用兩種方法解決電路設計問題
STM32操作矩陣鍵盤的兩種方法
創建主/從SPI接口的兩種方法詳談
![創建主/從SPI接口的<b class='flag-5'>兩種方法</b>詳談](https://file1.elecfans.com//web2/M00/A7/1F/wKgZomUMQoOALyKzAAAwextuNmY284.png)
使用jdbc連接上oracle的兩種方法
你還會手寫棧和隊列嗎棧和隊列的基本實現程序說明
單片機系統實現延時的兩種方法解析
![單片機系統<b class='flag-5'>實現</b>延時的<b class='flag-5'>兩種方法</b>解析](https://file.elecfans.com/web1/M00/B2/45/pIYBAF4FyXiADHT6AAGa7xHnJuw563.png)
片機實現延時的兩種方法
單片機實現延時兩種方法
![單片機<b class='flag-5'>實現</b>延時<b class='flag-5'>兩種方法</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32操作矩陣鍵盤的兩種方法——掃描和中斷
![STM32操作矩陣鍵盤的<b class='flag-5'>兩種方法</b>——掃描和中斷](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
簡述安裝打印機驅動的兩種方法
![簡述安裝打印機驅動的<b class='flag-5'>兩種方法</b>](https://file1.elecfans.com/web2/M00/81/F8/wKgaomQrgSqAXfVkAAEmFiRWCcw273.jpg)
評論