鱼C论坛

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

队列的疑问

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

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

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

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");
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-27 21:23:59 | 显示全部楼层
没人吗?
我想问我这样写算不算队列
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 23:56:05 | 显示全部楼层
看上去没啥问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2020-10-28 15:11:24 | 显示全部楼层
能用吗,能用就是好queue
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

意思是存一种数据可以这样用,但多种就要用结构体了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

可以是可以,但和书上不一样,我也不知道对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

多个数据,不用结构体,你怎么存从功能来说,你这算是queue了,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

能用就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 03:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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