数据结构笔记浅记(十一) 单向队列

「队列 queue」是一种遵循先入先出规则的线性数据结构。顾名思义,队列模拟了排队现象,即新来的人不断 加入队列尾部,而位于队列头部的人逐个离开。

在 Python 中,我们一般将双向队列类 deque 当作队列使用 ,虽然 queue.Queue() 是纯正的队列类,但不太好用,因此不推荐

链表和数组都可以实现队列。

基于链表的实现:我们可以将链表的“头节点”和“尾节点”分别视为“队首”和“队尾”,规定队尾仅可添加 节点,队首仅可删除节点

基于数组的实现:在数组中删除首元素的时间复杂度为 𝑂(𝑛) ,这会导致出队操作效率较低。然而,我们可以采用以下巧妙方 法来避免这个问题。 我们可以使用一个变量 front 指向队首元素的索引,并维护一个变量 size 用于记录队列长度。定义 rear = front + size ,这个公式计算出的 rear 指向队尾元素之后的下一个位置。 基于此设计,数组中包含元素的有效区间为 [front, rear - 1],各种操作的实现方法如图 5‑6 所示。

        ‧ 入队操作:将输入元素赋值给 rear 索引处,并将 size 增加 1 。

         ‧ 出队操作:只需将 front 增加 1 ,并将 size 减少 1 。

可以看到,入队和出队操作都只需进行一次操作,时间复杂度均为 𝑂(1)

队列典型应用

‧ 淘宝订单。购物者下单后,订单将加入队列中,系统随后会根据顺序处理队列中的订单。在双十一期 间,短时间内会产生海量订单,高并发成为工程师们需要重点攻克的问题。

‧ 各类待办事项。任何需要实现“先来后到”功能的场景,例如打印机的任务队列、餐厅的出餐队列等, 队列在这些场景中可以有效地维护处理顺序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章