兩個棧實現佇列 兩個佇列實現棧

2021-08-14 10:07:30 字數 1687 閱讀 9616

一、題目描述

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

二、**

1 自己**

基本思路:乙個棧用於壓縮,乙個專門用於彈出。因為棧是先進後出,所有的元素入棧再出棧,再入棧就可以將順序調整過來。但是沒有想到優化。

class solution

int pop()

int temo = stack2.top();

stack2.pop();

while(!stack2.empty())

return temo;

}private:

stack

stack1;

stack

stack2;

};

2 網上的思路

網上的思路:也是乙個棧用於進隊,乙個用於出隊。但是每次出隊後不需要再將原來的元素從新壓縮用於進隊的棧,其實這一步是多餘的。因為出隊的棧的元素,到沒有空之前,都是正確的出隊的順序。

class solution1

int pop()

int demo=0;

if(stack2.empty())

}demo = stack2.top();

stack2.pop();

return demo;

}private:

stack

stack1;

stack

stack2;

};

三、注意

在程式設計上需要注意的是:因為平時對vector比較熟悉,需要注意的是這裡用到了stack容易,pop()操作只是刪除了棧頂元素,沒有返回棧頂的元素,top()操作只是返回了棧頂的元素,但是沒有刪除棧頂的元素。入棧的操作函式是push()函式。

1、思路分析

思路和前面的差不多:不過這裡是兩個佇列輪著來。如果兩個佇列都是空,則讓佇列1作為入棧的;如果佇列1不為空佇列2為空,則將佇列1的元素順序彈出並壓入佇列2,但是只順序彈出佇列1的size-1個元素,將最後乙個元素,返回並刪除;如果佇列2不為空,一樣將其size-1個元素順序壓入佇列1,並返回其佇列2的最後乙個元素,並刪除,即可。(注意:在這裡,如果在棧中有元素,那麼兩個佇列相當於是交替進行壓入和彈出的)

####2、**

#include

#include

using

namespace

std;

/* 用兩個佇列實現乙個棧

*/class solution

int pop()

if(queue1.empty())

int temp = queue2.front();

queue2.pop();

return temp;

}else

int temp = queue1.front();

queue1.pop();

return temp;}}

private:

queue

queue1;

queue

queue2;

};int main()

程式設計注意:queue的操作中,front()函式返回佇列首元素的,但是一樣不刪除元素;pop()函式刪除元素但是不返回元素;push()函式將元素壓入佇列。

兩個棧實現佇列 兩個佇列實現棧

1.兩個棧實現佇列 大致思路 入佇列時,將元素入棧s1,出佇列時,將s2中的元素出棧即可,如果s2為空,那麼將s1中 s1.size 1 個元素出棧,加入到s2中,然後將s1中最後乙個元素出棧,即完成了出佇列的操作 include using namespace std include includ...

兩個棧實現佇列,兩個佇列實現棧

include include include using namespace std 使用兩個棧實現佇列,實現了push,pop,front操作 其中棧s2是輔助棧,push直接在s1中插入 pop從s2中出棧,如果s2是空的,將s1倒進s2,然後再出棧,這樣減少了倒棧次數,比較高效。front就...

兩個佇列實現棧和兩個棧實現佇列

棧 先進後出 佇列 先進先出 1 兩個佇列實現棧 佇列a 佇列b 入棧 入佇列a,1,2,3,4 入棧,在佇列a裡為 a 1,2,3,4 出棧,將佇列a中的元素入佇列b直到佇列a裡的元素只剩下乙個,則隊a為4,隊b為1,2,3,a 4,b 1,2,3,輸出a隊頭4 include include u...