zoukankan      html  css  js  c++  java
  • 用两个栈实现一个队列

    把栈封装成队列

    对于栈,就采用c++里面的stack
    使用两个栈,栈是先进后出,而队列是先进先出现在有两个栈,一个栈A放数据,另一个栈B为空,只要把前面栈A的数据出栈然后压到栈B,然后出栈。因此数据只要从栈A进,从栈B出就可以了但是,不是什么时候都能把栈A的数据压到栈B中,只有栈B为空才行。所以对于队列的操作,进队列,直接把数据压到栈A,出队列,就从栈B出栈,如果栈B不为空,直接出栈,如果栈B为空,需要把栈A的所有数据都分别出栈压到栈B中,这样就形成了队列的操作。

    template <typename T>
    class Nqueue{
    private:
        stack<T> stack1;
        stack<T> stack2;
    public:
        T push(const T & node);
        void pull();
    };
    template <typename T>
    void Nqueue<T>::push(const T & node)
    {
        stack1.push(node);
    }
    template <typename T>
    void Nqueue<T>::pull(const T & node)
    {
        if(stack2.size() <= 0){
            while(stack1.size() > 0){
                T &data = stack1.top();
                stack1.pop();
                stack2.push(data);
            }
        }
        if(stack2.size == 0){
            cout << "the queue is empty" << endl;
        }
        T head = stack.top();
        stack2.pop();
        return head;
    }
    

    将两个队列封装程栈

    上面的是用两个栈实现队列,同样,用两个队列同样也是可以实现栈的。栈是先进先出,所以,把队列A的数据移到队列B,顺序还是不会变的。思路就是从队列A不断出队放到队B,直到剩下一个元素,然后把这个元素出队。进栈的话就直接放到队列A,出栈的话,如果队列A有元素,就不断把队列A中的元素出队放到队列B直到最后一个元素,就直接出队相当于出栈。如果队列A为空,则需要将队列B中的元素分别出队然后放到队列A,直到最后一个元素,然后执行出队操作。
    c++实现

    template <typename T> class Nstack{
    private:
        queue<T> q1;
        queue<T> q2;
    public:
        void push(const T & element);
        T pop();
    };
    
    template <typename T>
    void Nstack<T>::push(const T & element)
    {
        q1.push(element);
    }
    template <typename T>
    T Nstack<T>::pop()
    {
        T front;
    
        if(q1.size() >  0){
            while(q1.size() != 1){
                front = q1.front();
                q2.push(front);
                q1.pop();
            }
            front = q1.front();
            q1.pop();
            return front;
        }
        if(q1.size() == 0){
            if(q2.size() > 0){
                while(q2.size() != 1){
                    front = q2.front();
                    q1.push(front);
                    q2.pop();
                }
                front = q2.front();
                q2.pop();
                return front;
            }
        }
        cout << "the queue is empty" << endl;
        return NULL;
    }
    
    
  • 相关阅读:
    从零开始学 Web 之 Vue.js(一)Vue.js概述,基本结构,指令,事件修饰符,样式
    从零开始学 Web 之 Vue.js(二)过滤器,按键修饰符,自定义指令
    js获取某个时间段前多长时间
    Object.create()详解
    React Redux
    react 路由按需加载
    react @types/react-router-dom报错
    create-react-app 创建react ts项目启动报错
    十进制转二进制、八进制、十六进制(js)
    代码编辑器设置自定义提示
  • 原文地址:https://www.cnblogs.com/0x12345678/p/5615304.html
Copyright © 2011-2022 走看看