m0_70767904 2022-05-29 17:06 采纳率: 100%
浏览 156
已结题

用c++语言实现队列的创建

(1)创建队列,将asdfghjkl依次入队。代码及注释
(2)将队列asdfghjkl依次出队。代码及注释
(3)编程实现创建一个最多6个元素的循环队列,将ABCDEF依次入队,判断循环队列是否队满。代码及注释

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2022-05-29 17:53
    关注

    (1)和(2)是一个代码,(3)在(1)的基础上有一些修改。
    (1)和(2)运行结果及代码:

    img

    #include <iostream>
    using namespace std;
    #define MAXLEN (int)20
    typedef char elementtype;
    //队列先进先出
    typedef struct  
    {
        elementtype* element;
        int cur;
        int tail;
    }SQueue;
    
    
    //初始化栈
    void InitStack_sq(SQueue &s)
    {
        int i=0;
        s.element = new elementtype[MAXLEN];
        s.cur = 0;
        s.tail = 0;
    }
    
    //判断队列是否为空
    int isEmpty_sq(SQueue s)
    {
        if(s.tail ==0 || s.cur == s.tail)
            return 1;
        else
            return 0;
    }
    
    //判断是否队满
    int isFull_sq(SQueue s)
    {
        if(s.tail == MAXLEN)
            return 1;
        else
            return 0;
    }
    
    //取队列元素
    int GetTop_sq(SQueue &s,elementtype& x)
    {
        if(isEmpty_sq(s))
            return 0;
        x = s.element[s.cur];
        return 1;
    }
    //入队
    int Push_sq(SQueue &s,elementtype x)
    {
        if(isFull_sq(s))
            return 0;
    
        //插入队列
        s.element[s.tail] = x;
        s.tail++;
        return 1;
    }
    //出队
    int Pop_sq(SQueue& s,elementtype& x)
    {
        if(isEmpty_sq(s))
            return 0;
        x = s.element[s.cur];
        s.cur++;
        return 1;
    }
    
    //遍历队列元素
    void showAll(SQueue s)
    {
        cout <<"队列元素:";
        for(int i=s.cur;i<s.tail;i++)
        {
            cout << (char)s.element[i];
        }
        cout << endl;
    }
    
    
    int main()
    {
        SQueue s;
        InitStack_sq(s); //初始化队列
        //asdfghjkl依次入队
        Push_sq(s,'a');
        Push_sq(s,'s');
        Push_sq(s,'d');
        Push_sq(s,'f');
        Push_sq(s,'g');
        Push_sq(s,'h');
        Push_sq(s,'k');
        Push_sq(s,'l');
        //显示队列元素
        showAll(s);
    
        elementtype x;
        //依次出队
        cout <<"出队:";
        while(!isEmpty_sq(s))
        {
            Pop_sq(s,x);
            cout <<(char)x;
        }
        cout << endl;
        return 0;
    }
    
    

    (3)运行结果:

    img

    代码:

    #include <iostream>
    using namespace std;
    #define MAXLEN (int)6
    typedef char elementtype;
    //队列先进先出
    typedef struct  
    {
        elementtype* element;
        int cur;
        int tail;
    }SQueue;
    
    
    //初始化栈
    void InitStack_sq(SQueue &s)
    {
        int i=0;
        s.element = new elementtype[MAXLEN];
        for(;i<MAXLEN;i++)
            s.element[i] = 0;
        s.cur = 0;
        s.tail = 0;
    }
    
    //判断队列是否为空
    int isEmpty_sq(SQueue s)
    {
        if(s.tail ==0 || s.cur == s.tail)
            return 1;
        else
            return 0;
    }
    
    //判断是否队满
    int isFull_sq(SQueue s)
    {
        if(s.tail == MAXLEN)
            return 1;
        else
            return 0;
    }
    
    //取队列元素
    int GetTop_sq(SQueue &s,elementtype& x)
    {
        if(isEmpty_sq(s))
            return 0;
        x = s.element[s.cur];
        return 1;
    }
    //入队
    int Push_sq(SQueue &s,elementtype x)
    {
        if(isFull_sq(s))
            s.tail = 0;
    
        //插入队列
        s.element[s.tail] = x;
        s.tail++;
        return 1;
    }
    //出队
    int Pop_sq(SQueue& s,elementtype& x)
    {
        if(isEmpty_sq(s))
            return 0;
        x = s.element[s.cur];
        s.cur++;
        return 1;
    }
    
    //遍历队列元素
    void showAll(SQueue s)
    {
        cout <<"循环队列元素:";
        
        for(int i=0;i<MAXLEN;i++)
        {
            if(s.element[i] != '\0')
                cout << (char)s.element[i];
        }
        cout << endl;
    }
    
    
    int main()
    {
        SQueue s;
        InitStack_sq(s); //初始化队列
        //ABCDEF入队
        Push_sq(s,'A');
        Push_sq(s,'B');
        Push_sq(s,'C');
        Push_sq(s,'D');
        Push_sq(s,'E');
        Push_sq(s,'F');
        //显示队列元素
        showAll(s);
    
        //判断是否队满
        if(isFull_sq(s))
            cout <<"此时队满"<<endl;
        else
            cout <<"队列未满"<<endl;
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月6日
  • 已采纳回答 5月29日
  • 创建了问题 5月29日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。