|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 巴巴鲁 于 2020-10-27 19:59 编辑
这个实现队列的功能,我想这样写行不行,时间复杂度都是O(n),而且不会出现”假溢出”
- #include <stdio.h>
- #include <stdlib.h>
- #define MAXSIZE 100
- int length;
- // 初始化队列
- void InitQueue(int *array)
- {
- printf("请输入队列的长度:");
- scanf_s("%d", &length);
- }
- // 建立顺序队列
- void CreateQueue(int *array)
- {
- int i;
- printf("请输入%d个数:", length);
- for (i = 0; i < length; i++)
- {
- scanf_s("%d", &array[i]);
- }
- }
- // 入队
- void PushQueue(int *array, int e)
- {
- if (length == MAXSIZE)
- {
- printf("超出最大长度,程序退出\n");
- exit(0);
- }
- length++;
- array[length - 1] = e;
- }
- // 出队
- void PopQueue(int *array)
- {
- int i;
- if (length >= 0)
- {
- length--;
- for (i = 0; i < length; i++)
- {
- array[i] = array[i + 1];
- }
- printf("出队成功\n");
- }
- else
- {
- printf("队列为空\n");
- }
- }
- // 判断队列是否为空
- void Judge(int *array)
- {
- if (length >= 0)
- {
- printf("队列不为空\n");
- }
- else
- {
- printf("队列为空\n");
- }
- }
- // 取队头元素
- void GetQueue(int *array)
- {
- if (length >= 0)
- {
- printf("%d\n", array[0]);
- }
- else
- {
- printf("队列为空\n");
- }
- }
- // 遍历队列
- void Print(int *array)
- {
- int i;
- for (i = 0; i < length; i++)
- {
- printf("%d ", array[i]);
- }
- printf("\n");
- }
- int main(void)
- {
- int pro, e;
- int array[MAXSIZE];
- while (1)
- {
- printf("-------------------------------\n");
- printf("1.初始化队列 2.建立顺序队列\n");
- printf("3.入队 4.出队\n");
- printf("5.判断队列是否为空 6.取对头元素\n");
- printf("7.遍历队列 0.退出程序\n");
- printf("-------------------------------\n");
- printf("请输入待执行的功能:");
- scanf_s("%d", &pro);
- if (pro > 7 || pro < 0)
- {
- printf("输入有误,请重新输入!\n");
- continue;
- }
- switch (pro)
- {
- case 0:
- printf("成功退出程序,欢迎下次再来^__^\n");
- exit(0);
- case 1:
- InitQueue(array);
- break;
- case 2:
- CreateQueue(array);
- break;
- case 3:
- printf("请输入待入队的元素:");
- scanf_s("%d", &e);
- PushQueue(array, e);
- break;
- case 4:
- PopQueue(array);
- break;
- case 5:
- Judge(array);
- break;
- case 6:
- GetQueue(array);
- break;
- case 7:
- Print(array);
- break;
- }
- }
- return 0;
- }
复制代码
感觉就出队出现了for循环,请问这还是队列吗?也满足先进先出
- // 出队
- void PopQueue(int *array)
- {
- int i;
- if (length >= 0)
- {
- length--;
- for (i = 0; i < length; i++)
- {
- array[i] = array[i + 1];
- }
- printf("出队成功\n");
- }
- else
- {
- printf("队列为空\n");
- }
- }
复制代码 |
|