剑指Offer-9-用两个栈实现队列


我们知道,栈是“先进后出”而队列是“先进先出”,那么要用两个栈来实现队列想必就是通过对栈中元素进行倒腾来实现

思路

假设两个栈:stack1stack2
入队元素压入stack1
出队操作:

  1. 若stack2为空,则弹出stack1中的所有元素并压入stack2中,这样第一个弹出的便是最先进入栈中的元素
  2. 若stack2不为空,则直接弹出stack2的栈顶元素

编码

哈哈哈哈,信心满满准备开敲,结果看了半天题目输入输出都看不懂??
去翻了评论,还真就不止我一个,原来大家都是啊,那我就放心了

class CQueue
{
public:
    CQueue(){
    }

    void appendTail(int value){
        s1.push(value);
    }

    int deleteHead(){
        if (s2.empty()){
            if (s1.empty()){
                return -1;
            }
            while (!s1.empty()){
                s2.push(s1.top());
                s1.pop();
            }
        }
        int temp = s2.top();
        s2.pop();
        return temp;
    }
private:
    stack s1, s2;
};

就是因为只有stack2空了才会再去stack1里面去,这样就避免了顺序混乱导致的结果错误