队列仅仅同意一端进行插入操作,还有一端进行删除操作。队列是一种先进先出的线性表。简称FIFO。同意插入的一段为队尾,同意删除的一端为队头。
顺序队列
与栈不同的是,队列的出队元素在队头,那么队列没出去一个元素,后面的元素就要依次像前移动。这样他的时间复杂度就是O(n)。
考虑上面截图的流程感觉效率非常低,起始我们的队列能够以还有一种方式来处理,就是元素不懂,而队头的指针移动。这样它的时间复杂度就为O(1)。
上面攻克了效率低的问题,可是会存在控件浪费的现象。之前已经出队的元素。控件还在那,以下我们引入循环队列的概念,解决问题。
我们把队列头尾相接的这种存储结构称之为循环队列。
rear:队尾所指向的队列位置。
font:队头所指向的队列位置。
QueueSize:队列最大长度。
推断队列是否满:(rear + 1) % QueueSize == font。
计算队列长度:(rear - font + QueueSize ) % QueueSize
链队列
队列的链式存储结构与单链表的链式存储结构一致,仅仅只是是元素尾进头出,我们称之为链队列。
入队操作,将an的后继节点改为e的地址,然后尾节点指向e。
出队操作,
两个队列的选择。看详细的需求。与之前总结栈的差别一致,假设元素的大小确定则使用顺序队列最好,假设元素的大小不确定则使用连队列最好。