搜索
写经验 领红包
 > 影视

队列是c语言中一种基础的数据结构你掌握什么(队列定义c语言)

导语:队列是C语言中一种基础的数据结构,你掌握了吗?没有请进来学习

上一篇文章给大家介绍了一种特殊的数据结构——栈(C语言中耳熟能详的“栈”到底是个什么东西?今天就带你捋清楚),栈的最基本特性就是先进后出,后进先出。那今天就带着大家了解另外一种特殊的数据结构——队列,相信大家都排过队吧,仔细观察排队的规则,发现它也是有一个逻辑顺序的——先进先出,后进后出。

队列基本概念

队列是最常见的概念,日常生活经常需要排队,仔细观察队列会发现,队列是一种逻辑结构,是一种特殊的线性表。特殊在:

只能在固定的两端操作线性表

只要满足上述条件,那么这种特殊的线性表就会呈现出一种“先进先出”的逻辑,这种逻辑就被称为队列。

由于约定了只能在线性表固定的两端进行操作,于是给队列这种特殊的线性表的插入删除,起个特殊的名称:

队头:可以删除节点的一端队尾:可以插入节点的一端入队:将节点插入到队尾之后,函数名通常为enQueue()出队:将队头节点从队列中剔除,函数名通常为outQueue()取队头:取得队头元素,但不出队,函数名通常为front()

队列又分为两种,一种是循环队列,就是队列头和队列尾是相接的。另外一种就是链式队列也就是正常的队列,并不循环,今天主要带大家了解链式队列。

链式队列

链式队列的组织形式与链表无异,只不过插入删除被约束在固定的两端。为了便于操作,通常也会创建所谓管理结构体,用来存储队头指针、队尾指针、队列元素个数等信息:

从上图可以看到,链式队列主要控制队头和队尾,由于管理结构体中保存了当前队列元素个数size,因此可以不必设计链表的头节点,初始化空队列时只需要让队头队尾指针同时指向空即可。不过有一说一,感觉这个管理结构体有点鸡肋,用处不是特别大,所以一般我们都直接不用管理结构体。

结点设计

初始化

入队

出队

这样子一看,栈也好、队列也好,我们都可以用一个链表整出来。不过这个链表又不是普通的链表,普通的链表是比较随意的,增加数据或者删除数据的时候你选在链表头或者链表尾都行,没有约束。

栈的话就只能在链表一端进行操作,也就是所谓的栈顶,链表尾也就是栈底不允许操作。队列的话虽然两端都可以进行操作,但是需要确定哪端是读端、哪端是写端。

度白嵌入式,专注分享嵌入式知识,本次分享的是数据结构中队列的相关知识,喜欢的朋友可以关注~

本文内容由小媛整理编辑!