2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 数据结构——队列的C语言代码实现

数据结构——队列的C语言代码实现

时间:2020-04-25 04:26:52

相关推荐

数据结构——队列的C语言代码实现

系列文章目录

数据结构——顺序表的C语言代码实现

数据结构——八种链表的C语言代码实现

数据结构——栈的C语言代码实现

数据结构——队列的C语言代码实现

数据结构——堆的C语言代码实现

文章目录

系列文章目录前言一、基础知识队列的概念(queue)二、代码实现1.queue.h2.queue.c3.test.c总结

前言

主要实现链式队列

提示:以下是本篇文章正文内容,下面案例可供参考

一、基础知识

队列的概念(queue)

援引百科:

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

基于对链表和栈的熟悉,我们可以较为容易认识到队列的特点。

通俗而言:队列是一种较之栈更为公平的结构,它实现了先进先出多的功能。可以将其比作银行的排队队列,我们只能在人群的末尾排队,在人群的最前端接受服务。

二、代码实现

1.queue.h

注意为了方便在尾部和头部进行操作,我们可以设置头尾指针。对于两个需要设置的指针,如果不想使用全局变量,可以将两个指针结合为一个结构体,便于操作。

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdbool.h>#include<stdlib.h>#include<assert.h>typedef int DataType;//定义队列typedef struct QueueNode{DataType data;struct QueueNode* next;}QNode;//设置头尾指针typedef struct PQueue{QNode* head;QNode* tail;}PQueue;//初始化void QueueInit(PQueue* pq);//删除队列void QueueDestroy(PQueue* pq);//尾插void QueuePush(PQueue* pq, DataType data);//头删void QueuePop(PQueue* pq);//头结点DataType QueueFront(PQueue* pq);//尾节点DataType QueueBack(PQueue* pq);//判读队空bool QueueEmpty(PQueue* pq);//打印队列void PrintQueue(PQueue* pq);

2.queue.c

代码如下(示例):

#include"Queue.h"//初始化void QueueInit(PQueue* pq){pq->head = NULL;pq->tail = NULL;}//删除队列void QueueDestroy(PQueue* pq){QNode* p = pq->head;while (p!= NULL){QNode* tem = p->next;free(p);p = tem;}}//尾插void QueuePush(PQueue* pq, DataType data){//确保队列初始化成功assert(pq);QNode* tem = (QNode*)malloc(sizeof(QNode));tem->data = data;if (pq->head == NULL){pq->head = pq->tail = tem;}else{pq->tail->next = tem;pq->tail = tem;}}//头删void QueuePop(PQueue* pq){//确保队列不为空assert(pq);QNode* tem = pq->head->next;free(pq->head);pq->head = tem;}//头结点DataType QueueFront(PQueue* pq){bool ret = QueueEmpty(pq);if (ret){printf("队列为空!\n");exit(-1);}return pq->head->data;}//尾节点DataType QueueBack(PQueue* pq){bool ret = QueueEmpty(pq);if (ret){printf("队列为空!\n");exit(-1);}return pq->tail->data;}//判读队空bool QueueEmpty(PQueue* pq){if (pq->head == NULL){return true;}elsereturn false;}//打印队列void PrintQueue(PQueue* pq){bool ret = QueueEmpty(pq);if (ret){printf("队列为空!\n");return;}QNode* tem = pq->head;while (tem != pq->tail->next){printf("%d ", tem->data);tem = tem->next;}}

该处使用的url网络请求的数据。

3.test.c

代码如下:

#include"Queue.h"int main(){PQueue pq;QueueInit(&pq);QueuePush(&pq, 1);QueuePush(&pq, 2);QueuePush(&pq, 3);QueuePush(&pq, 4);QueuePush(&pq, 5);QueuePop(&pq);PrintQueue(&pq);int ret = QueueFront(&pq);printf("\n%d ", ret);int tem = QueueBack(&pq);printf("\n%d ", tem);return 0;}

总结

在熟练掌握线性表、链表和栈之后,队列的实现已十分简单。这篇文章只是简单地实现了队列,便于大家更好地理解和认识队列。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。