数据结构--队列

队列仅仅同意一端进行插入操作,还有一端进行删除操作。队列是一种先进先出的线性表。简称FIFO。同意插入的一段为队尾,同意删除的一端为队头。



顺序队列

与栈不同的是,队列的出队元素在队头,那么队列没出去一个元素,后面的元素就要依次像前移动。这样他的时间复杂度就是O(n)。



考虑上面截图的流程感觉效率非常低,起始我们的队列能够以还有一种方式来处理,就是元素不懂,而队头的指针移动。这样它的时间复杂度就为O(1)。



上面攻克了效率低的问题,可是会存在控件浪费的现象。之前已经出队的元素。控件还在那,以下我们引入循环队列的概念,解决问题。

我们把队列头尾相接的这种存储结构称之为循环队列。



rear:队尾所指向的队列位置。

font:队头所指向的队列位置。

QueueSize:队列最大长度。

推断队列是否满:(rear + 1) % QueueSize == font。


计算队列长度:(rear - font  + QueueSize ) % QueueSize


链队列

队列的链式存储结构与单链表的链式存储结构一致,仅仅只是是元素尾进头出,我们称之为链队列。





入队操作,将an的后继节点改为e的地址,然后尾节点指向e。



出队操作,



两个队列的选择。看详细的需求。与之前总结栈的差别一致,假设元素的大小确定则使用顺序队列最好,假设元素的大小不确定则使用连队列最好。


原文地址:https://www.cnblogs.com/llguanli/p/6803579.html