• 剑指Offer 09.用两个栈实现队列


    原题链接

    题解

    题目的大意就是利用两个栈来模拟队列的插入和删除,最容易想到的就是声明两个栈a, b,a这个栈用来做插入,b用来做删除作用。
    当我们数据插入到栈中的,栈中的数据顺序是和删除的顺序相反的,①这就可以利用b这个栈了,将a中的数据弹出,依次压入b中,那么b中就是删除的顺序了。
    ②当我们删除的时候,只要b中不为空,直接将b的栈顶弹出并返回,③反之重复①②操作,如果b还是空,则返回-1

    代码如下

    class CQueue {
    public:
        stack<int> a, b;//a是插入数组,b是删除数组
        CQueue() {
    
        }
        
        void appendTail(int value) {
            a.push(value);
        }
        
        int deleteHead() {
            if(b.size() == 0){//当b中没有数据的时候,才需要将a中的数据给b,那么b中就存在删除的序列
                while(a.size()){
                    b.push(a.top());
                    a.pop();
                }
            }
    
            if(b.size()){
                int res = b.top();
                b.pop();
                return res;
            }
            else return -1;
        }
    };
    
    /**
     * Your CQueue object will be instantiated and called as such:
     * CQueue* obj = new CQueue();
     * obj->appendTail(value);
     * int param_2 = obj->deleteHead();
     */
    

    开始的时候,自己写的时候,在做完删除之后,还把b中现有的数据还给了a中了,然后每一次删除的时候都要两个栈来回换,其实,直接可以把删除的序列直接放在b中,当b为空的时候,才将a中的给b就可以了

  • 相关阅读:
    android 的通知管理
    java 反射机制
    java基础知识梳理
    spring 知识梳理
    Orange's_1_win7下搭建环境
    编写安全代码:死循环
    我的kindle书单
    [更新Github地址]python学习,自己写了个简单聊天工具mychat
    给VIM和Terminal配色:Solarized
    Hive学习之路 (八)Hive中文乱码
  • 原文地址:https://www.cnblogs.com/Lngstart/p/13212759.html
一二三 - 开发者的网上家园