鱼C论坛

 找回密码
 立即注册
查看: 2661|回复: 8

队列的疑问

[复制链接]
发表于 2020-10-27 19:43:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 巴巴鲁 于 2020-10-27 19:59 编辑

这个实现队列的功能,我想这样写行不行,时间复杂度都是O(n),而且不会出现”假溢出”
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXSIZE 100
  4. int length;

  5. // 初始化队列
  6. void InitQueue(int *array)
  7. {
  8.         printf("请输入队列的长度:");
  9.         scanf_s("%d", &length);
  10. }

  11. // 建立顺序队列
  12. void CreateQueue(int *array)
  13. {
  14.         int i;

  15.         printf("请输入%d个数:", length);
  16.         for (i = 0; i < length; i++)
  17.         {
  18.                 scanf_s("%d", &array[i]);
  19.         }
  20. }

  21. // 入队
  22. void PushQueue(int *array, int e)
  23. {
  24.         if (length == MAXSIZE)
  25.         {
  26.                 printf("超出最大长度,程序退出\n");
  27.                 exit(0);
  28.         }

  29.         length++;
  30.         array[length - 1] = e;
  31. }

  32. // 出队
  33. void PopQueue(int *array)
  34. {
  35.         int i;

  36.         if (length >= 0)
  37.         {
  38.                 length--;

  39.                 for (i = 0; i < length; i++)
  40.                 {
  41.                         array[i] = array[i + 1];
  42.                 }
  43.                 printf("出队成功\n");
  44.         }
  45.         else
  46.         {
  47.                 printf("队列为空\n");
  48.         }
  49. }

  50. // 判断队列是否为空
  51. void Judge(int *array)
  52. {
  53.         if (length >= 0)
  54.         {
  55.                 printf("队列不为空\n");
  56.         }
  57.         else
  58.         {
  59.                 printf("队列为空\n");
  60.         }
  61. }

  62. // 取队头元素
  63. void GetQueue(int *array)
  64. {
  65.         if (length >= 0)
  66.         {
  67.                 printf("%d\n", array[0]);
  68.         }
  69.         else
  70.         {
  71.                 printf("队列为空\n");
  72.         }
  73. }

  74. // 遍历队列
  75. void Print(int *array)
  76. {
  77.         int i;

  78.         for (i = 0; i < length; i++)
  79.         {
  80.                 printf("%d ", array[i]);
  81.         }

  82.         printf("\n");
  83. }

  84. int main(void)
  85. {
  86.         int pro, e;
  87.         int array[MAXSIZE];

  88.         while (1)
  89.         {
  90.                 printf("-------------------------------\n");
  91.                 printf("1.初始化队列     2.建立顺序队列\n");
  92.                 printf("3.入队                   4.出队\n");
  93.                 printf("5.判断队列是否为空 6.取对头元素\n");
  94.                 printf("7.遍历队列           0.退出程序\n");
  95.                 printf("-------------------------------\n");
  96.                 printf("请输入待执行的功能:");
  97.                 scanf_s("%d", &pro);

  98.                 if (pro > 7 || pro < 0)
  99.                 {
  100.                         printf("输入有误,请重新输入!\n");
  101.                         continue;
  102.                 }

  103.                 switch (pro)
  104.                 {
  105.                 case 0:
  106.                         printf("成功退出程序,欢迎下次再来^__^\n");
  107.                         exit(0);
  108.                 case 1:
  109.                         InitQueue(array);
  110.                         break;
  111.                 case 2:
  112.                         CreateQueue(array);
  113.                         break;
  114.                 case 3:
  115.                         printf("请输入待入队的元素:");
  116.                         scanf_s("%d", &e);
  117.                         PushQueue(array, e);
  118.                         break;
  119.                 case 4:
  120.                         PopQueue(array);
  121.                         break;
  122.                 case 5:
  123.                         Judge(array);
  124.                         break;
  125.                 case 6:
  126.                         GetQueue(array);
  127.                         break;
  128.                 case 7:
  129.                         Print(array);
  130.                         break;
  131.                 }
  132.         }

  133.         return 0;
  134. }
复制代码


感觉就出队出现了for循环,请问这还是队列吗?也满足先进先出
  1. // 出队
  2. void PopQueue(int *array)
  3. {
  4.         int i;

  5.         if (length >= 0)
  6.         {
  7.                 length--;

  8.                 for (i = 0; i < length; i++)
  9.                 {
  10.                         array[i] = array[i + 1];
  11.                 }
  12.                 printf("出队成功\n");
  13.         }
  14.         else
  15.         {
  16.                 printf("队列为空\n");
  17.         }
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-27 21:23:59 | 显示全部楼层
没人吗?
我想问我这样写算不算队列
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 23:56:05 | 显示全部楼层
看上去没啥问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 23:59:11 | 显示全部楼层
就是不太算队列,只有一个数组在操作。数据结构应该是存储各样数据的,上个结构体吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-28 15:11:24 | 显示全部楼层
能用吗,能用就是好queue
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-28 19:18:17 | 显示全部楼层
2269099035 发表于 2020-10-27 23:59
就是不太算队列,只有一个数组在操作。数据结构应该是存储各样数据的,上个结构体吧

意思是存一种数据可以这样用,但多种就要用结构体了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-28 19:18:47 | 显示全部楼层
大神本人 发表于 2020-10-28 15:11
能用吗,能用就是好queue

可以是可以,但和书上不一样,我也不知道对不对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-28 23:23:00 | 显示全部楼层
巴巴鲁 发表于 2020-10-28 19:18
意思是存一种数据可以这样用,但多种就要用结构体了?

多个数据,不用结构体,你怎么存从功能来说,你这算是queue了,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-29 01:10:49 | 显示全部楼层
巴巴鲁 发表于 2020-10-28 19:18
可以是可以,但和书上不一样,我也不知道对不对

能用就行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-3 22:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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