• 用两个栈实现队列


    问题描述:

    用两个栈实现队列,队列的声明如下,请实现他的两个函数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++编译一下看看差别。

    生命在于折腾,生活就是如此的丰富多彩
  • 相关阅读:
    锤子科技官网:问题整理及注意事项
    springboot中文文档
    Spring Framework 开发参考手册中文(在线HTML)
    .is() 全选复选的判断
    c:forEach用法
    SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
    火狐浏览器下载文件保存文件名的乱码问题
    多线程安全的解决方法
    MySQL的concat以及group_concat的用法
    mysql 将时间转换成时间戳
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/4122002.html
Copyright © 2020-2023  润新知