请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
该类声明两个整型栈变量,pushst和popst
push数据时,直接往pushst里面入。
pop数据时,对popst栈进行判断,为空时将pushst的数据全部push到popst中,popst执行pop()操作,非空则直接popst执行pop()操作。
class MyQueue {
public:
MyQueue() {
//内置类型回调用他自己的构造函数
}
void push(int x) {
pushst.push(x);
}
int pop() {
if(popst.empty())
{
while(!pushst.empty())
{
popst.push(pushst.top());
pushst.pop();
}
}
int val=popst.top();
popst.pop();
return val;
}
int peek() {
if(popst.empty())
{
while(!pushst.empty())
{
popst.push(pushst.top());
pushst.pop();
}
}
return popst.top();
}
bool empty() {
return pushst.empty()&&popst.empty();
}
private:
stack
pushst; stack
popst; };
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
声明两个整型队列变量,q1和q2
push数据时,往非空队列push,两个都为空,任意一个入
pop数据时,将非空队列非队尾节点数据(size()>1)都入到空队列中,然后将非空队列队尾这个数据pop
class MyStack {
public:
MyStack() {
}
void push(int x) {
if(!q2.empty())
{
q2.push(x);
}
if(!q1.empty())
{
q1.push(x);
}
if(q1.empty()&&q2.empty())//两者都为空,push到q1(q2)
{
q1.push(x);
}
}
int pop() {
if(!q1.empty())
{
while(q1.size()>1)
{
q2.push(q1.front());
q1.pop();
}
int front=q1.front();
q1.pop();
return front;
}
else
{
while(q2.size()>1)
{
q1.push(q2.front());
q2.pop();
}
int front=q2.front();
q2.pop();
return front;
}
}
//非空队列队尾数据即是所求
int top() {
if(!q1.empty())
{
return q1.back();
}
else
{
return q2.back();
}
}
bool empty() {
return q1.empty()&&q2.empty();
}
private:
queue
q1; queue
q2; };