一.链队列的原理
很明显队列是一种线性结构,那么我们用链子链起来,还是一个线性结构.还记得我们刚刚讲的顺序队列嘛,在出队的时候,虽然有两种方法,但是两种都有缺点.
一个是需要移动数据,一个是空间不断减少,会溢出.
当我们采用链队列,就能很好的解决这中问题了.
二.链队列的结构
队列,我们肯定需要一个指向第一个节点的指针和一个指向最后一个节点的指针.
那么首先我们需要的是每个节点结构,可以链接起来.
我这里的数据是一个人的结构体,同时我还定义了一个宏当做链队列的最大值,为什么呢?
链队列没有固定大小,可以无限的入队,但是内存有限制,所以我们还是说希望有个最大值管住.
当然现在只是有节点,那我们的队头指针和队尾指针呢?
我们又加了一个结构体来当做链队列的结构,其头指针,尾指针的类型,就是我们的节点类型,加了一个length变量用来计数.
可以看到有点模糊,没事,我来画个图:
这就是链队列的结构了.
三.链队列的初始化
只需要将两个指针设置为空就可以了
像这样
四.链队列判断是否满或空
1.是否为满
因为我们定义了一个最大数值的宏,同时又记录了插入的个数
对比一下即可判断是否为满.
2.是否为空
这个判断就更简单了,如果front指向的是空,那么就是空队列.
五.入队
入队操作跟单链表差不多,当然只能从尾部入队.
我们来看看图解:
所有有两种情况.
六.出队
要注意我们只能从头进行删除数据.
七.链队列的遍历
很单链表一样.
八.其他小接口
1.获取链队列长度
2.获取链队列首元素
3.清空链队列
将每个节点内存释放,同时将链队列头尾指针都设置为空.
酒.总结
链队列是使用链表实现的队列,与顺序队列相比,链队列的插入和删除操作更高效,不需要移动元素。链队列的重要特点是使用头指针和尾指针分别指向链表的头部和尾部,可以快速执行入队和出队操作。