两个栈实现队列
1、题目
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
2、说明
(1)栈用stack表示,两个栈分别是stack1和stack2
(2)入栈 stack.push();出栈 stack.pop()
(3)入队:
stack1.push()
(4)出队
出队分为两种情况,
stack2为空,直接将stack1中的元素pop出来,然后push到stack2中,最后将stack2中的元素pop出来;
stack2非空,首先将stack2中的元素pop出来,然后再讲stack1中的元素pop出来,将stack1pop出来的元素push到stack2中,最后pop出stack2中的元素。
3、核心代码
class Solution { //用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 public: void push(int node) { stack1.push(node);//入栈 } int pop() { //两种情况:stack2为空,先从stack1pop出的元素push到stack2,然后stack2 pop;stack2非空,直接pop if(stack2.empty()) { while(!stack1.empty()) { stack2.push(stack1.top()); stack1.pop(); } } int p=stack2.top(); stack2.pop(); return p; } private: stack<int> stack1; stack<int> stack2; };