LeetCode 225. 用佇列實現棧
阿新 • • 發佈:2019-01-06
題目描述
使用佇列實現棧的下列操作:
- push(x) – 元素 x 入棧
- pop() – 移除棧頂元素
- top() – 獲取棧頂元素
- empty() – 返回棧是否為空
思路
建立兩個佇列 q1,q2
入棧
將元素 x 直接放入 q1 佇列中。
出棧
- 也就是把 q1 的隊尾元素出佇列,由於佇列只能從隊頭出隊,因此先把 q1 中除了隊尾元素的其他值存到 q2 中
- 再把隊尾元素也就是棧頂出隊
- 最後將 q2 中的值存到 q1 中
獲取棧頂元素
也就是獲取 q1 的隊尾元素
class MyStack {
public:
queue<int> q1, q2;
int i = 0;
int temp;
int res;
MyStack() {
}
void push(int x) {
q1.push(x);
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int length1 = q1.size();
i = 0;
while(length1 > 1 && i < length1 - 1 )
{
temp = q1.front();
q2.push(temp);
q1.pop();
i++;
}
res = q1.front();
q1.pop();
i = 0;
int length2 = q2.size();
while(i < length2)
{
temp = q2.front();
q1.push(temp);
q2.pop();
i++;
}
return res;
}
/** Get the top element. */
int top() {
return q1.back();
}
/** Returns whether the stack is empty. */
bool empty() {
return q1.empty();
}
};