zoukankan      html  css  js  c++  java
  • 剑指offer-用两个栈实现队列

    用两个栈实现一个队列

    一、算法思想

    • 栈的特点是进出在同一头,满足后进先出的顺序
    • 队列的特点是进出在两头,满足先进先出的顺序

    stack1用于存放入队的元素,以压栈的方式压入stack1,但是这样取出的顺序是反的,所以将stack2当作中转站,这样顺序就变成先进先出了。

    二、算法步骤

    1. 入队:先判断stack1是否已满。如果已满,则以出栈顺序全部压入stack2。然后再入队。如果不满,则直接入队即可。
    2. 出队:先判断stack2是否为空。如果为空,先将stack1中内容全部出栈压入stack2,然后再出队。如果不为空,则直接出队即可。

    三、算法实现

    3.1 C++写法

    class Solution
    {
    public:
        void push(int node) {
            //判满步骤省略,stack容器是动态的
            stack1.push(node);
        }
    
        int pop() {
            if(stack2.empty()){//stack2为空
                if(stack1.empty()){//stack1也为空
                    return 0;
                }
                else{//stack1中有元素
                    while(!stack1.empty()){
                        int temp=stack1.top();
                        stack1.pop();
                        stack2.push(temp);
                    }
                }
            }
            int top=stack2.top();
            stack2.pop();
            return top;
        }
    
    private:
        stack<int> stack1;
        stack<int> stack2;
    };
    

    C++ STL的stack的使用参见我的另外一篇博客:C++ STL容器——stack用法介绍

    keep going
  • 相关阅读:
    SDN第三次作业
    SDN第二次上机作业
    SDN第二次作业
    JAVA小记
    算法笔记
    排序
    SDN期末作业
    SDN第五次上机作业
    SDN第四次上机作业
    SDN第四次作业
  • 原文地址:https://www.cnblogs.com/MarkKobs-blog/p/10347678.html
Copyright © 2011-2022 走看看