題目描述
用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。
解題思路
隊列
C++隊列queue模板類的定義在< queue>頭文件中,queue 模板類需要兩個模板參數,一個是元素類型,一個容器類型,元素類型是必要的,容器類型是可選的,默認爲deque 類型。
C++隊列Queue是一種容器適配器,它給予程序員一種先進先出(FIFO)的數據結構。
C++隊列Queue類成員函數如下:
- back()返回最後一個元素
- empty()如果隊列空則返回真
- front()返回第一個元素
- pop()刪除第一個元素
- push()在末尾加入一個元素
- size()返回隊列中元素的個數
queue 的基本操作舉例如下:
- queue入隊,如例:q.push(x); 將x 接到隊列的末端。
- queue出隊,如例:q.pop(); 彈出隊列的第一個元素,注意,並不會返回被彈出元素的值。
- 訪問queue隊首元素,如例:q.front(),即最早被壓入隊列的元素。
- 訪問queue隊尾元素,如例:q.back(),即最後被壓入隊列的元素。
- 判斷queue隊列空,如例:q.empty(),當隊列空時,返回true。
- 訪問隊列中的元素個數,如例:q.size()
用兩個棧實現隊列的push和pop操作,注意這裏給出的模板中要求pop返回int值。
入隊:將元素壓進棧A
出隊:判斷棧B是否爲空,如果爲空,則將棧A中所有元素pop,並push進棧B,棧B出棧;
如果不爲空,棧B直接出棧。
代碼
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if (stack2.empty()){
while (!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
}
if (stack2.empty())
return -1;
int res = stack2.top();
stack2.pop();
return res;
}
private:
stack<int> stack1;
stack<int> stack2;
};