鱼C论坛

 找回密码
 立即注册
查看: 2320|回复: 2

[已解决]只带尾指针的循环链队列的入队和出队

[复制链接]
发表于 2023-10-26 18:03:59 | 显示全部楼层
这是一个简单的只带尾指针的循环链队列的代码框架,需要完善cqlink_Display函数来输出链队列中各数据元素的值。

  1. #include<stdio.h>
  2. #include<stdlib.h>

  3. #define maxqsize 100
  4. #define OK 1
  5. #define ERROR 0

  6. typedef int status;
  7. typedef int qelemtype;

  8. typedef struct cqnode {
  9.     qelemtype data;     // 数据域
  10.     struct cqnode* next; // 指针域
  11. } cqnode, * cqlink;

  12. status cqlink_InitQueue(cqlink& rear) // 创建一个空的循环链队列rear
  13. {
  14.     rear = (cqnode*)malloc(sizeof(cqnode));
  15.     rear->next = rear;
  16.     return OK;
  17. }

  18. status cqlink_enqueue(cqlink& rear, qelemtype e) // 在循环链队列rear中插入新的元素e,使其成为新的队尾元素
  19. {
  20.     cqnode* q;
  21.     q = (cqnode*)malloc(sizeof(cqnode));
  22.     q->data = e;
  23.     q->next = rear->next;
  24.     rear->next = q;
  25.     rear = q;
  26.     return OK;
  27. }

  28. status cqlink_DeQueue(cqlink& rear, qelemtype& e) // 在循环链队列rear中删除队首元素,并用e返回其值
  29. {
  30.     cqnode* p = rear->next;
  31.     if (rear == p)
  32.         return ERROR;
  33.     cqnode* q = p->next;
  34.     e = q->data;
  35.     if (q == rear)
  36.         rear = p;
  37.     p->next = q->next;
  38.     free(q);
  39.     return OK;
  40. }

  41. status cqlink_Display(cqlink rear) // 从队首到队尾,依次输出链队列中各数据元素的值
  42. {
  43.     cqnode* p = rear->next;
  44.     while (p != rear)
  45.     {
  46.         printf("%d ", p->data);
  47.         p = p->next;
  48.     }
  49.     if (p != NULL)
  50.         printf("%d", p->data);
  51.     printf("\n");
  52.     return OK;
  53. }

  54. int main()
  55. {
  56.     cqlink rear;
  57.     qelemtype e;
  58.     int n, i, j, d, g;

  59.     cqlink_InitQueue(rear);

  60.     printf("请问要入队几次:\n");
  61.     scanf("%d", &d);
  62.     printf("请输入要入队的数:\n");
  63.     for (i = 0; i < d; i++)
  64.     {
  65.         scanf("%d", &e);
  66.         cqlink_enqueue(rear, e);
  67.     }

  68.     printf("入队后的队列中各元素值为:");
  69.     cqlink_Display(rear);

  70.     printf("请问要出队几次:\n");
  71.     scanf("%d", &g);
  72.     printf("出队的数为:");
  73.     for (j = 0; j < g; j++)
  74.     {
  75.         cqlink_DeQueue(rear, e);
  76.         printf("%d ", e);
  77.     }
  78.     printf("\n");

  79.     printf("出队后的队列中各元素值为:");
  80.     cqlink_Display(rear);

  81.     return 0;
  82. }
复制代码


这个代码将根据输入的队列长度和元素值创建了一个带头结点的循环链表表示的队列,并实现了入队和出队操作,最后输出相应的结果。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-30 06:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表