美文网首页
C语言队列的基本操作

C语言队列的基本操作

作者: EarthChen | 来源:发表于2017-08-06 18:03 被阅读58次

    本篇介绍一下编程中比较重要的一个数据结构队列,队列有个很显著的标志,对其中的数据是先进先出,如果是顺序存储结构可以说就是一个受限的数组,对链式存储结构就只能说是符合先进先出的规则了,这种数据结构在我们真正的编程中还是相当常用的。实际中根据需要去定制自己的队列。

    开始

    顺序队列的操作

    首先我们来介绍一下顺序存储结构下的队列的定义和基本操作

    添加适当的头文件,定义一个顺序存储数据结构,

    这里需要添加头文件和定义一个队列的顺序数据结构

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXSIZE 100
    #define OK 1
    #define ERROR 0
    typedef int Status;
    typedef int ElemType;
    typedef struct
    {
        ElemType *base;
        int front;
        int rear;
    }SqQueue;
    

    初始化一个队列(创建一个队列)

    
    Status InitQueue(SqQueue *q) {
        q->base = (ElemType *)malloc(MAXSIZE * sizeof(ElemType));
        if (!q->base)
        {
            exit(0);
        }
        q->front = q->rear = 0;
        return OK;
    }
    

    入队操作

    Status InsertQueue(SqQueue *q, ElemType e) {
        if ((q->rear + 1) % MAXSIZE == q->front)
        {
            return ERROR;
        }
        q->base[q->rear] = e;
        q->rear = (q->rear + 1) % MAXSIZE;
        return OK;
    }
    
    

    出队操作

    Status DeleteQueue(SqQueue *q, ElemType *e) {
        if (q->front == q->rear)
        {
            return ERROR;
        }
        *e = q->base[q->front];
        q->front = (q->front + 1) % MAXSIZE;
        return OK;
    }
    

    主函数

    void main() {
        SqQueue q;
        int a[10];
        int i;
        InitQueue(&q);
        for (i = 0; i < 10; i++)
        {
            InsertQueue(&q, i + 1);
        }
        for (i = 0; i < 10; i++)
        {
            DeleteQueue(&q, &a[i]);
            printf("%d\n", a[i]);
        }
    }
    
    

    运行结果

    cmd顺序队列运行结果

    都是很基本的操作,在顺序队列中,可以从数组的方式去理解,这样将会让你理解起来更简单

    链式队列的操作

    首先我们来介绍一下顺序存储结构下的队列的定义和基本操作

    添加适当的头文件,定义一个队列链式存储数据结构,

    这里需要添加头文件和定义一个队列的链式存储数据结构

    #include <stdio.h>
    #include <stdlib.h>
    #define OK 1;
    #define ERROR 0;
    typedef int ElemType;
    typedef int Status;
    typedef struct QNode
    {
        ElemType data;
        struct QNode *next;
    }QNode, *QueuePrt;
    typedef struct
    {
        //对头,尾指针
        QueuePrt front, rear;
    }LinkQueue;
    

    初始化一个队列(创建一个队列)

    Status InitQueue(LinkQueue *q) {
        q->front = q->rear = (QueuePrt)malloc(sizeof(QNode));
        if (!q->front)
        {
            exit(0);
        }
        q->front->next = NULL;
        return OK;
    }
    

    入队操作

    Status InsertQueue(LinkQueue *q, ElemType e) {
        QueuePrt p = (QueuePrt)malloc(sizeof(QNode));
        if (!p)
        {
            exit(0);
        }
        p->data = e;
        p->next = NULL;
        q->rear->next = p;
        q->rear = p;
        return OK;
    }
    
    
    

    出队操作

    Status DeleteQueue(LinkQueue *q, ElemType *e) {
        QueuePrt p;
        if (q->front == q->rear)
        {
            return ERROR;
        }
        p = q->front->next;
        *e = p->data;
        q->front->next = p->next;
        if (q->rear == p)
        {
            q->rear = q->front;
        }
        free(p);
        return OK;
    }
    

    主函数

    void main() {
        LinkQueue q;
        int a[10];
        int i;
        InitQueue(&q);
        for (i = 0; i < 10; i++)
        {
            InsertQueue(&q, i + 1);
        }
        for (i = 0; i < 10; i++)
        {
            DeleteQueue(&q, &a[i]);
            printf("%d\n", a[i]);
        }
    }
    
    

    运行结果

    cmd顺序队列运行结果

    在链式存储结构中的队列同样还是相对很简单的,只要理解了先进先出的逻辑,和了解一下指针操作就可以很容易的写出队列的节本操作。

    注:

    • 上述代码在visual studio 2015中编译成功运行,其他ide请自行测试
    • 上述文字皆为个人看法,如有错误或建议请及时联系我

    相关文章

      网友评论

          本文标题:C语言队列的基本操作

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