美文网首页C语言&嵌入式编程语言爱好者C语言
C语言队列学习竟是如此简单!

C语言队列学习竟是如此简单!

作者: 楚乔_0a40 | 来源:发表于2018-06-12 23:24 被阅读7次

    一、何为队列?

    队列 (Queue) :是一种先进先出 (First In First Out ,简称 FIFO) 的线性表,也是运算受限的线性表。只允许在表的一端进行插入,而在另一端进行删除。

    队首 (front) :允许进行删除的一端称为队首。

    队尾 (rear) :允许进行插入的一端称为队尾。

    队列中没有元素时称为空队列。在空队列中依次加入元素 a 1 , a 2 , …, a n 之后, a 1 是队首元素, a n 是队尾元素。显然退出队列的次序也只能是 a 1 , a 2 , …, a n ,即队列的修改是依先进先出的原则进行的,如图 3-5 所示。

    二、基本操作

    1、创建新队列

    2、判空

    3、进队

    4、出队

    5、清空队

    6、获得队头元素

    7、遍历队

    8、销毁队

    9、队长

    三、队列的存储实现及运算实现

    #include

    #include//bool类型头文件

    #define MaxSize 50

    typedef int ElemType;

    //定义循环队列结构体

    typedef struct

    {

        ElemType data[MaxSize];

        int front,rear;

    } SqQueue;    //typedef struct 命名方法  最简洁的 适合入门                 http://blog.csdn.net/jianxiong8814/article/details/1556589

    //初始化

    void InitQueue(SqQueue *Q)

    {

        (*Q).rear = (*Q).front = 0;

    }

    //判断队列是否为空

    bool isEmpty(SqQueue *Q)

    {

        if((*Q).rear == (*Q).front)

            return true;

        else

            return false;

    }

    //入队操作

    bool EnQueue(SqQueue *Q)

    {

        if((*Q).rear+1%MaxSize == (*Q).front)

            return false;

        ElemType m;

        printf("请输入要输入的数据:");

        scanf("%d",&m);

        (*Q).rear = ((*Q).rear+1)%MaxSize;

        (*Q).data[(*Q).rear] = m;

        printf("%4d",(*Q).data[(*Q).rear]);

        printf("\n");

    //用于显示入队数据

        return true;

    }

    //出队操作

    bool DeQueue(SqQueue *Q,ElemType *x)

    {

        if(isEmpty(Q))

        {

            printf("该队列为空\n\n");

            return false;

        }

        (*Q).front = ((*Q).front+1)%MaxSize;

        *x = (*Q).data[(*Q).front];

        printf("读出的数据为:");

        printf("%d\n",*x);

    //用于显示出队数据

        return true;

    }

    int main()

    {

        SqQueue q;

        ElemType x,n;

        InitQueue(&q);

        while(1)

        //下面是用户操作菜单

        {

            printf("       主菜单\n");

            printf(" -----------------\n");

            printf("   0---结束\n");

            printf("   1-----插入\n");

            printf("   2-------读出\n");

            printf("请选择0--2:");

            scanf("%d",&n);

            switch(n)

            {

            case 0:

                return 0;

            case 1:

                EnQueue(&q);

                break;

            case 2:

                DeQueue(&q,&x);

                break;

            }

        }

        return 0;

    }

    小编推荐一个学C语言/C++的学习裙【 六六六,二九五,四九八 】,邀请码(怀念c),无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

    相关文章

      网友评论

        本文标题:C语言队列学习竟是如此简单!

        本文链接:https://www.haomeiwen.com/subject/leldeftx.html