钱包颜色影响财运吗_钱包放什么招财
2
2025-09-08
队列是一种先进先出(FIFO)的线性数据结构,更先进入的元素更先被移除。可以把它想象成超市收银台前的队伍:先到的人先结账,后来的人排在队尾。
用一段连续内存存储元素,维护两个指针 front 与 rear。缺点是可能出现“假溢出”,需要循环队列解决。
通过指针链接节点,动态扩容,无容量上限,但每个节点需额外空间存储指针。
把数组视为首尾相接的环,利用取模运算高效利用空间,避免假溢出。
CPU 采用时间片轮转策略时,将就绪进程排成队列,依次分配时间片。
Kafka、RabbitMQ 等中间件用队列削峰填谷,解耦生产者和消费者,提高系统吞吐量。
打印机缓冲区就是队列,先到先打印,避免任务丢失。
在图或树中,BFS 用队列逐层扩展节点,保证最短路径优先。
日志系统把日志事件入队,后台线程批量刷盘,降低 I/O 阻塞。
对比维度 | 队列 | 栈 |
---|---|---|
进出顺序 | 先进先出 | 后进先出 |
操作端 | 队头出、队尾入 | 同一端进出 |
典型应用 | 任务调度、消息队列 | 函数调用、表达式求值 |
多线程环境下,普通队列会出现竞态条件。常用方案:
class CircularQueue:
def __init__(self, k):
self.queue = [None] * k
self.max_size = k
self.front = 0
self.rear = 0
self.size = 0
def enqueue(self, value):
if self.size == self.max_size:
raise OverflowError("Queue full")
self.queue[self.rear] = value
self.rear = (self.rear + 1) % self.max_size
self.size += 1
def dequeue(self):
if self.size == 0:
raise IndexError("Queue empty")
val = self.queue[self.front]
self.queue[self.front] = None
self.front = (self.front + 1) % self.max_size
self.size -= 1
return val
Q:为什么循环队列要浪费一个存储单元?
A:为了区分空与满,当 (rear+1)%capacity==front 时判满,避免与空队列条件 rear==front 冲突。
Q:优先队列是队列吗?
A:不是严格意义上的 FIFO 队列,它按优先级出队,底层通常用堆实现。
Q:队列能用来实现栈吗?
A:可以,用两个队列来回倒腾,入栈 O(n)、出栈 O(1),或用单个队列配合循环移位。
在分布式系统里,消息队列常作为事件总线:
传统内存队列断电即失,新一代持久化队列如 Kafka 把消息顺序写入磁盘,支持TB 级数据回溯。流式队列(Pulsar)更进一步,提供多租户隔离与分层存储,让队列兼具消息系统与实时数据湖的能力。
发表评论
暂时没有评论,来抢沙发吧~