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

    问题描述:

    用两个栈实现队列,队列的声明如下,请实现他的两个函数AppendTail和DeleteHead,分别完成在队列

    尾部插入节点和在队列头部删除节点的功能。

    template<typename T>
    class CQuene
    {
    public:
        CQuene(){};
        ~CQuene(){};

        void AppendTail(const T &Node);
        T DeleteHead();
    private:
        stack<T>stack1;
        stack<T>stack2;
    };

    思路分析:

    上述声明中包含了两个栈,因此这道题的意图是要求我们操作这两个后进先出的栈实现一个先进先出的队列。

    stack1中存放新入队列的元素。当元素要出队列时,判断stack2是否为空,若为空则将stack1中的元素全部压入

    stack2,这是stack2中栈顶的元素一次是最早入队的元素。若stack2不为空之前出栈一个元素则为队列的首元素。

    新元素进队还是先压入stack1.

    参考代码:

    template<typename T>
    void CQuene<T>::AppendTail(const T &Node)
    {
        stack1.push(Node);
    }

    template<typename T>
    T CQuene<T>::DeleteHead()
    {
        if (stack2.size() <= 0)
        {
            while(stack1.size()>0)
            {
                T &data = stack1.top();
                stack1.pop();
                stack2.push(data);
            }
        }
        if (stack2.size() == 0)
        {
            throw new exception("quene is empty");
        }

        T head = stack2.top();
        stack2.pop();

        return head;
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
        int a[] = {1,2,4,7,3,5,6,8};
        int b[] = {4,7,2,1,5,3,6,8};
        CQuene<int> q;

        for (int i = 0;i < 8;i++)
        {
            q.AppendTail(i);
        }
        for (int i = 0;i < 4;i++)
        {
           
            cout<<q.DeleteHead()<<endl;;
        }
        q.AppendTail(100);
        for (int i = 0;i < 5;i++)
        {

            cout<<q.DeleteHead()<<endl;;
        }

        getchar();
        return 0;
    }

    思考:

    主要是能够用栈模拟出队列的过程。两个如何操作。在vs2008上编译时出了问题,首先它不支持

    模版函数和类的申明分文件实现。其次,我试了下必须在cpp文件中才能编译通过。过段时间把全

    部代码在G++编译一下看看差别。

    生命在于折腾,生活就是如此的丰富多彩
  • 相关阅读:
    sqlachemy查询对象转化成字典/json使用
    pandas DF去重
    flask request和response
    flask路由要点
    flask项目结构
    __init__.py在导包中起到的作用
    git 查看修改账号密码
    02.flask-script
    vue点击父组件里面的列表动态传值到子组件
    安卓手机点击背景图会出现预览的情况
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/4122002.html
Copyright © 2011-2022 走看看