思路:双栈实现入队列和出队列的操作
//A+B栈来实现队列
//A栈用来push 可以利用A栈获取到队列的back即A.top
//B栈用来pop 如果要获取队列的top,可以先把A栈元素依次弹出依次压入B栈中,然后B.top就是队列的top,pop也类似
class MyQueue {stack<int>A,B;//A+B栈来实现队列 //A栈用来push 可以利用A栈获取到队列的back即A.top//B栈用来pop 如果要获取队列的top,可以先把A栈元素依次弹出依次压入B栈中,然后B.top就是队列的top,pop也类似public:MyQueue() {}//队列push操作void push(int x) {A.push(x);}//队列pop操作,记忆中pop函数没有返回值的呀呀呀呀呀int pop() {//获取队首元素int peak = this->peek();//弹出B栈元素B.pop();//返回队首元素return peak;}//队列peek操作,返回队首元素int peek() {//如果B栈不为空则返回B栈顶元素if(!B.empty()) return B.top();//B栈为空且A栈为空则表明队列中元素为空if(A.empty()) return -1;//A栈中有元素,则依次压入B栈中,while(!A.empty()){B.push(A.top());A.pop();}//返回B栈顶元素int res = B.top();return res;}//判断队列是否为空,如果A与B都为空则为空bool empty() {return A.empty()&&B.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();*/