• 用c++编程:用两个栈实现队列


    栈s1和栈s2,栈s1专门为入队,栈s2专门为出队。

    入队:

    • 当s1和s2都为空时,直接入队s1。
    • 当s1为空,s2不为空时,把s2的元素都倒回s1,然后再入队s1

    出队:

    • 当s2不为空时,直接出队s2
    • 当s2为空且s1不为空时,把s1的元素都倒进s2,然后出队s2

    代码实现如下:

    #include <iostream>
    #include <stack>
    
    using namespace std;
    
    template <class T>
    struct Myqueue{
        T front()
        {
            if(s2.size()==0)
            {
                if(s1.size()==0)
                {
                    cout<<"队列为空"<<endl;
                    return 0;
                }
                while(s1.size()>0)
                {
                    s2.push(s1.top());
                    s1.pop();    
                }
            }
            return s2.top();
        }
    
            void pop()
            {
                    if(s1.size()==0 && s2.size()==0)
                    {
                            cout<<"队列为空"<<endl;
                    }
                    while(s1.size()>0)
                    {
                            s2.push(s1.top());
                            s1.pop();
                    }
                    s2.pop();
            }
            void push(T &t)
        {
            if(s1.size()==0)
            {
                while(s2.size()>0)
                {
                    s1.push(s2.top());
                    s2.pop();
                }
            }
            s1.push(t);
        }
    
    
        stack<T> s1;
        stack<T> s2;    
    };
    
    
    int main(void)
    {
        Myqueue<int> myqueue;
        int flag;
        int num;
        int i=0;
        for(i=0;i<10;i++)
            myqueue.push(i);
        for(i=0;i<10;i++)
        {
            cout<<myqueue.front()<<" ";
            myqueue.pop();
        }
        cout<<endl;
        while(1)
        {
            cout<<"请输入要执行的操作,入队或者出队,1为入队,2
    为出队,3为打印队头,0为退出"<<endl;
            cin>>flag;
            if(flag==1)
            {
                cout<<"请输入要增加的结点的值"<<endl;
                cin>>num;
                myqueue.push(num);
            }
            else if(flag==2)
            {
                myqueue.pop();
            }
            else if(flag==3)
                cout<<"队头结点为:"<<myqueue.front()<<endl;
            else 
                break;
        }
        return 0;
    }

     程序猿必读

  • 相关阅读:
    cnn softmax regression bp求导
    使用kd-tree加速k-means
    KDTree详解及java实现
    加入商品分类信息,考虑用户所处阶段的 图模型 推荐算法 Rws(random walk with stage)
    用户标签
    LDA(latent dirichlet allocation)
    对物品进行反馈 代码
    1.虚拟机中安装ubuntu
    4.动态HTML处理和机器图像识别
    3.非结构化数据与结构化数据提取
  • 原文地址:https://www.cnblogs.com/longzhongren/p/4419030.html
Copyright © 2020-2023  润新知