C语言队列的基本操作

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

开始

顺序队列的操作

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

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

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

#include 
#include 
#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]);
    }
}

运行结果

C语言队列的基本操作_第1张图片
cmd顺序队列运行结果

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

链式队列的操作

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

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

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

#include 
#include 
#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]);
    }
}

运行结果

C语言队列的基本操作_第2张图片
cmd顺序队列运行结果

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

注:

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

你可能感兴趣的:(C语言队列的基本操作)