【LeetCode】232.用栈实现队列
题意:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
思路:用两个栈对着来,第一个栈接收入队数据,第二个栈进行出队处理。
代码:
class MyQueue {
public:
stack <int> stkIn, stkOut;
MyQueue() {
}
void push(int x) {
stkIn.push(x);
}
int pop() {
// 只有出栈为空才导入入栈的全部数据,否则会乱序
if (stkOut.empty())
{
while (stkIn.size())
{
int num = stkIn.top();
stkIn.pop();
stkOut.push(num);
}
}
int num = stkOut.top();
stkOut.pop();
return num;
}
int peek() {
int num = pop();
stkOut.push(num);
return num;
}
bool empty() {
return stkIn.empty() && stkOut.empty();
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/
【LeetCode】225. 用队列实现栈
题意:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
思路:用一个队列存储,需要操作栈顶时倒腾到另一个队列,直到剩下最后一个即可
代码:
class MyStack {
public:
queue<int> qA, qB;
MyStack() {
}
void push(int x) {
qA.push(x);
}
int pop() {
int size = qA.size();
size --;
while (size--)
{
int data = qA.front();
qA.pop();
qB.push(data);
}
int num = qA.front();
qA.pop();
size = qB.size();
while (size--)
{
int data = qB.front();
qB.pop();
qA.push(data);
}
return num;
}
int top() {
int num = pop();
qA.push(num);
return num;
}
bool empty() {
return qA.empty() && qB.empty();
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/
心态:“第五章 栈与队列part01” 拿下!
参考资料