【leetcode】 栈实现队列
- 解题思路:在这里,我们首先要用到两个栈进行来回倒数据,建立输入栈和输出栈,先把数据push进栈InputStack中,然后再把InputStack栈里面的数据拷贝给输出栈OutputStack中,接下来pop栈OutputStack,直到将其清空为止,然后又把数据拷贝给InputStack,pop空OutputStack,无形之中就完成了队列的先进先出FIFO(First In First Out)的操作了。
如图:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<stack>
#include<stdlib.h>
using namespace std;
class MyQueue {
public:
/** Initialize your data structure here. */
MyQueue() {
}
/** Push element x to the back of queue. */
void push(int x) {
InputStack.push(x);
}
/** Removes the element from in front of queue and returns that element. */
int pop() {
while (!InputStack.empty())
{
OutputStack.push(InputStack.top());
InputStack.pop();
}
int top = OutputStack.top();
OutputStack.pop();
while (!OutputStack.empty())
{
InputStack.push(OutputStack.top());
OutputStack.pop();
}
return top;
}
/** Get the front element. */
int peek() {
while (!InputStack.empty())
{
OutputStack.push(InputStack.top());
InputStack.pop();
}
int top = OutputStack.top();
while (!OutputStack.empty())
{
InputStack.push(OutputStack.top());
OutputStack.pop();
}
return top;
}
/** Returns whether the queue is empty. */
bool empty() {
if (InputStack.empty() && OutputStack.empty())
{
return true;
}
else
{
return false;
}
}
private:
stack<int> OutputStack;
stack<int> InputStack;
};