m0_75093936 2023-03-23 11:36 采纳率: 100%
浏览 38
已结题

编程实现链队的入队、出队操作。(需要详细过程)

【问题描述】
求解答编程实现链队的入队、出队操作。(需要详细过程。)

  • 写回答

4条回答 默认 最新

  • 关注

    链表实现的队列吗?之前给你写过一个啊,那个有什么问题吗?还是说不需要循环链表了?
    下面是一个链式队列的代码,运行结果如下(截图不全,入队元素是10、9、8,10和9的入队没截上图):

    img

    C代码:

    #include <stdio.h>
    #include <stdlib.h>
    /******************定义链式队列,先进先出x*********************/
    typedef struct _node
    {
        int data;
        struct _node* next;
    }QueueNode, * Queue;
    //初始化队列
    Queue Queueinit()
    {
        Queue head = (Queue)malloc(sizeof(QueueNode));
        head->next = 0;
        return head;
    }
    //入队
    int Queuepush(Queue q, int c)
    {
        Queue p = q;
        QueueNode* t = (QueueNode*)malloc(sizeof(QueueNode));
        int pos = 1;
    
        t->data = c;
        t->next = 0;
        while (p->next)
        {
            p = p->next;
            pos++;
        }
    
        p->next = t;
        return pos;
    }
    //出队,成功出队返回1,出队失败返回0
    int Queuepop(Queue q, int* e)
    {
        Queue p = q->next;
        if (q->next == 0)
            return 0;
        else
        {
            *e = p->data;
            q->next = p->next;
            free(p);
            p = 0;
            return 1;
        }
    }
    //判断是否为空
    int Queueempty(Queue q)
    {
        if (q->next == 0)
            return 1;
        else
            return 0;
    }
    
    //获取队顶元素
    int Queuetop(Queue q, int* e)
    {
        Queue p = q->next;
        if (q->next == 0)
            return 0;
        else
        {
            *e = p->data;
            return 1;
        }
    }
    
    //获取队列长度
    int QueueLength(Queue q)
    {
        Queue p = q->next;
        int len = 0;
        while (p)
        {
            len++;
            p = p->next;
        }
        return len;
    }
    
    
    
    int main()
    {
        int op; //选项
        Queue qq = Queueinit(); //初始化队列
        int data;
        while (1)
        {
            printf("链式队列功能演示\n");
            printf("1.入队\n");
            printf("2.出队\n");
            printf("3.获取队顶元素\n");
            printf("4.获取队列长度\n");
            printf("5.队列元素依次出队并显示\n");
            printf("6.结束程序\n");
            scanf("%d", &op);
            switch(op)
            {
            case 1:
                printf("请输入需要入队的元素:");
                scanf("%d", &data);
                Queuepush(qq, data);
                break;
            case 2:
                if (Queuepop(qq, &data))
                    printf("出队元素为%d\n", data);
                else
                    printf("当前队列为空\n");
                break;
            case 3:
                if (Queuetop(qq, &data))
                    printf("队顶元素为%d\n", data);
                else
                    printf("当前队列为空\n");
                break;
            case 4:
                printf("当前队列长度为%d\n", QueueLength(qq));
                break;
            case 5:
                if (Queueempty(qq))
                    printf("当前队列为空\n");
                else
                {
                    printf("出队元素为:");
                    while (!Queueempty(qq))
                    {
                        Queuepop(qq, &data);
                        printf("%d ", data);
                    }
                    printf("\n");
                }
                break;
            case 6:
                return 0;
            }
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月24日
  • 已采纳回答 3月24日
  • 创建了问题 3月23日

悬赏问题

  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 angular开发过程中,想要读取模型文件,即图1的335行,会报404错误(如图2)。但我的springboot里配置了静态资源文件,如图3。且在该地址下我有模型文件如图4,请问该问题该如何解决呢?
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 vite打包后,页面出现h.createElement is not a function,但本地运行正常
  • ¥15 Java,消息推送配置