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 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b