两个栈实现队列与两个队列实现栈
生活随笔
收集整理的這篇文章主要介紹了
两个栈实现队列与两个队列实现栈
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 兩個棧實現隊列
實現一
思路
? ? s1是入棧的,s2是出棧的。
- 入隊列,直接壓到s1是就行了
- 出隊列,先把s1中的元素全部出棧壓入到s2中,彈出s2中的棧頂元素;再把s2的所有元素全部壓回s1中
實現二
思路
? ? s1是入棧的,s2是出棧的。保證所有元素都在一個棧里面
- 入隊列時:如果s1為空,把s2中所有的元素倒出壓到s1中;否則直接壓入s1
- 出隊列時:如果s2不為空,把s2中的棧頂元素直接彈出;否則,把s1的所有元素全部彈出壓入s2中,再彈出s2的棧頂元素
比較:與實現一相比較,出隊列時不必每次都搗鼓了。
實現三
思路
? ? s1是入棧的,s2是出棧的。
- 入隊列:直接壓入s1即可
- 出隊列:如果s2不為空,把s2中的棧頂元素直接彈出;否則,把s1的所有元素全部彈出壓入s2中,再彈出s2的棧頂元素
比較
? ? 與實現二相比較,入隊直接入即可,感覺此時已是最優。
2. 兩個隊列實現棧
實現一
思路
? ? q1是專職進出棧的,q2只是個中轉站
- 入棧:直接入隊列q1即可
- 出棧:把q1的除最后一個元素外全部轉移到隊q2中,然后把剛才剩下q1中的那個元素出隊列。之后把q2中的全部元素轉移回q1中
圖示
? ?
實現二
思路
? ? q1是專職進出棧的,q2只是個中轉站。元素集中存放在一個棧中,但不是指定(q1 或 q2)。
? ? 定義兩個指針:pushtmp:指向專門進棧的隊列q1; tmp:指向臨時作為中轉站的另一個棧q2
- 入棧:直接入pushtmp所指隊列即可
- 出棧:把pushtmp的除最后一個元素外全部轉移到隊列tmp中,然后把剛才剩下q1中的那個元素出隊列
比較
? ? 實現二,出棧后就不用轉移回原來的棧了(圖示最后一步),這樣減少了轉移的次數。
總結
以上是生活随笔為你收集整理的两个栈实现队列与两个队列实现栈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python多进程及多参数的处理方法
- 下一篇: 小大整数对象池及intern机制