1. 程式人生 > >兩個棧實現一個佇列的演算法

兩個棧實現一個佇列的演算法

兩個棧實現佇列

實現一

df0acb2a-f96e-35b1-b4e3-ade0e36d4134.png

思路

s1是入棧的,s2是出棧的。

a.入佇列,直接壓到s1是就行了
b.出佇列,先把s1中的元素全部出棧壓入到s2中,彈出s2中的棧頂元素;再把s2的所有元素全部壓回s1中

實現二

思路

    s1是入棧的,s2是出棧的。保證所有元素都在一個棧裡面

入佇列時:如果s1為空,把s2中所有的元素倒出壓到s1中;否則直接壓入s1
出佇列時:如果s2不為空,把s2中的棧頂元素直接彈出;否則,把s1的所有元素全部彈出壓入s2中,再彈出s2的棧頂元素
比較:與實現一相比較,出佇列時不必每次都搗鼓了。

實現三

思路

s1是入棧的,s2是出棧的。

入佇列:直接壓入s1即可
出佇列:如果s2不為空,把s2中的棧頂元素直接彈出;否則,把s1的所有元素全部彈出壓入s2中,再彈出s2的棧頂元素
比較

與實現二相比較,入隊直接入即可,感覺第三種方法已是最優。



  • df0acb2a-f96e-35b1-b4e3-ade0e36d4134-thumb.png
  • 大小: 56.3 KB

相關推薦

java版資料結構與演算法佇列實現一個佇列

/** * 佇列:先進先出 */ class MyQueue { int a[]; int maxSize; //大小 int front; //開頭 int rear; //結尾 int nItems; //元素個數 //初始化

實現一個佇列演算法

兩個棧實現佇列 實現一 思路 s1是入棧的,s2是出棧的。 a.入佇列,直接壓到s1是就行了 b.出佇列,先把s1中的元素全部出棧壓入到s2中,彈出s2中的棧頂元素;再把s2的所有元素全部壓回s1中 實現二 思路     s1是入棧的,s2是出棧的。保證所有元素都在一個棧裡面

python ——佇列實現一個&實現一個佇列

1、兩個佇列實現一個棧 進棧:元素入佇列A 出棧:判斷如果佇列A只有一個元素,則直接出隊。否則,把隊A中的元素出隊併入隊B,直到隊A中只有一個元素,再直接出隊。為了下一次繼續操作,互換隊A和隊B。 python實現如下: class StackWithTwoQueues(object

詳解實現一個佇列(python實現——經典面試題)

1、題目說明       使用兩個棧結構,實現一個佇列功能,實現佇列的新增元素和彈出元素。       注意:       佇列特點是隻能在佇列尾部新增元素,在佇列頭部刪除元素,先進先出(FIFO/

實現一個佇列 佇列實現一個

棧和佇列實現的程式碼在連結中的部落格https://blog.csdn.net/Damn_Yang/article/details/83928852 兩個棧實現一個佇列  思路:            入隊時,直接壓入

05、實現一個佇列佇列實現一個

題目描述: 1. 用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。 2. 用兩個佇列來實現一個棧,完成棧的Push和Pop操作。 佇列中的元素為int型別。 解題思路: 1. 入隊時,直接壓入stack1中;出隊時,判斷stack2是

實現一個佇列(java)

一、問題描述 使用兩個棧實現一個佇列 二、演算法分析 棧是先進後出,因此兩個可以模擬實現先進先出 三、演算法設計 定義資料結構 Stack<Integer> stack1 Stack<Integer> stack2 對於push操作:元素入佇列

實現一個佇列佇列實現一個

1、兩個棧實現一個佇列            入隊時,直接壓入stack1中。            出隊時,判斷stack2是否為空,如果stack2為空,則將stack1中的元素倒入stack2中,否則直接彈出stack2中的元素。 //入隊操作 void EnQu

資料結構----通過實現一個佇列

定義兩個棧A、B實現一個佇列先進先出的特點。 棧的特點:先進後出 隊的特點:先進先出 需要注意的條件有: 1、佇列滿的條件 A滿,B非空 2、佇列空的條件 A空,B空 3、入佇列,佇列非滿的條件 (1)A非滿 (2)A滿,B空(將A中的資料全部匯入到B中)

佇列實現一個 + 實現一個佇列 Java

面試中常出現讓你手寫兩個佇列實現一個棧,兩個棧實現一個佇列的問題,很是頭疼!今天就仔細將我分析,思考過的Java程式碼給大家分享一下:(一)兩個佇列實現一個棧: 兩個佇列新增元素,哪個佇列為空,由於

使用實現一個佇列

4、程式碼實現 這裡使用第二種優化方法倆實現兩個棧實現一個佇列的操作,下面我將按照下面步奏實現上述操作; (1)利用前插法建立鏈式棧liststack: (2)建立likequeue類封裝兩個鏈式棧liststack,設定成員函式popqueue()pushqueue()來分別實現佇列的壓入操作和彈

使用佇列實現一個,使用實現一個佇列

轉自:http://blog.csdn.net/zgh1988/article/details/6988904 時間:小師妹請客之後,2013/6/16 1、這裡所說的都是STL中的queue,stack      其中queue的特點是先進先出,它所具有的函式有:

(LeetCode)用實現一個佇列

LeetCode上面的一道題目,原文如下: Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue.pop()

構成一個佇列演算法

  在《劍指Offer》中看到了一個演算法:用兩個棧實現一個佇列。然後我就在思考這個要怎麼實現,佇列的特點是先進先出,而棧的特點是先進後出,與佇列恰好相反。   但是如果是兩個棧的話就可以實現,用一個棧進行入棧操作,另一個棧進行出棧操作。當要入佇列時,便進入S1;當要出佇列時,檢查S2是否為

leetcode:用實現一個佇列 Implement Queue using Stacks

Implement the following operations of a queue using stacks. push(x) -- Push element x to the back o

【資料結構】(面試題)使用實現一個佇列(詳細介紹)

使用兩個棧實現一個佇列思路一:我們設定s1是入棧的,s2是出棧的。入佇列,直接壓到s1即可出佇列,先把s1中的元素倒入到s2中,彈出s2中的棧頂元素;再把s2的剩餘元素全部倒回s1中。缺點:每次只要出棧一個元素就要將元素倒來倒去,麻煩!!!思路2:入佇列時:如果s1為空,把s

實現一個佇列&用佇列實現一個

做題之前,我們先來回顧一下“棧和佇列的相同點以及不同點”,便於做題時的應用!1.區別與聯絡相同點:(1)棧和佇列都是控制訪問點的線性表;              (2)棧和佇列都是允許在端點處進行資料的插入和刪除的資料結構;不同點:(1)棧遵循“後進先出(LIFO)”的原則

劍指offer---實現一個佇列

棧的特點是後進先出,佇列的特點是先進先出 要用棧實現佇列,那麼便需要將棧進行兩次彈出操作,由於彈出的棧頂元素是最後一個進棧的元素,所以經過兩次反轉,那麼彈棧順序就剛好和進棧順序一致 程式碼分析: 要實現這個功能,主要在於進棧和彈棧的步驟修改,用棧一當做原棧,那麼

實現一個佇列/佇列實現一個

1兩個棧實現一個佇列 1.原理分析: 佇列的主要操作有兩個:入隊操作和出隊操作,出隊時從隊頭出,入隊是從隊尾插入,入隊的操作和入棧的操作類似,而最關鍵的問題是出隊操作,要出佇列的是佇列的第一個元素,而出棧的是棧的棧頂元素,所以我們可以這樣:        假設兩個棧A和棧B

實現一個佇列以及佇列實現一個(Java)

兩個棧實現一個佇列 import java.util.Stack; public class Demo07 { Stack<Integer> stack1 = new Sta