使用队列实现栈的下列操作:
- push(x) -- 元素 x 入栈
- pop() -- 移除栈顶元素
- top() -- 获取栈顶元素
- empty() -- 返回栈是否为空
思路:
用两个队列que1和que2实现队列的功能,que2其实完全就是一个备份的作用,把que1最后面的元素以外的元素都备份到que2,然后弹出最后面的元素,再把其他元素从que2导回que1。当然,也可以使用一个队列,见法二。
代码:
#include<iostream>
#include<queue>
using namespace std;
//两个队列实现栈
class stack
{
public:
queue<int>que1;
queue<int>que2;
stack(){};
void push(int x)
{
que1.push(x);
}
int pop()
{
int size=que1.size();
size--;
while(size--)
{
que2.push(que1.front());
que1.pop();
}
int res=que1.front();
que1.pop();
que1=que2;
while(!que2.empty())
{
que2.pop();
}
return res;
}
int top()
{
return que1.back();
}
bool empty()
{
return que1.empty();
}
};
//一个队列实现栈
class stack2
{
public:
queue<int>que;
stack2(){};
void push(int x)
{
que.push(x);
}
int pop()
{
int size=que.size();
size--;
while(size--)
{
que.push(que.front());
que.pop();
}
int res=que.front();
que.pop();
return res;
}
int top() {
return que.back();
}
bool empty() {
return que.empty();
}
};
int main()
{
//主函数添加自己所需要的东西就好了
return 0;
}