一、題目描述
用兩個棧來實現乙個佇列,完成佇列的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...