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