【剑指offer刷题】-09-用两个栈实现队列

难度:简单
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

注:此题考查队列和栈的知识点。

思路:栈和队列是常见的数据结构,栈是先进后出,队列是先进先出。本题主要实现队列的插入和删除过程。两个栈stack1,stack2,首先插入元素{a,b,c}到stack1中,此时stack1栈顶元素是c,stack2为空,出队时,将stack1中元素压入stack2中此时栈顶元素为a,即可出栈了——实现了先进先出。总结:出队操作——当satck2不为空时,在stack2中的栈顶元素是最先进入入队列的元素,可以直接弹出。当stack2为空时,直接把stack1中的元素依次压人stack2。 入队操作——直接插入stack1。(源于剑指offer)

class Solution
{
public:
    void push(int node) {
        //当stack2不为空
         while(!stack2.empty()){
            stack1.push(stack2.top());
            stack2.pop();
        }
        //直接插入
        stack1.push(node);
     }

    int pop() {
        //当stack1不为空
         while(!stack1.empty()){
            stack2.push(stack1.top());
            stack1.top();
        }
        int result=stack2.top();
        stack2.pop();
        return result;
     }

private:
    stack<int> stack1;
    stack<int> stack2;
};

猜你喜欢

转载自blog.csdn.net/xmc_muncy/article/details/80719488
今日推荐