队列
主要内容:
- 队列
- 循环队列
- 队列的链式存储
- 队列的应用
-------------------------------------------------------------------------------------------------------------------
队列&栈:
- 队列是两端出入数据,分队首、队尾,堆栈是单端出入数据,有栈顶指针;
- 要明确理解栈和队列的应用场景,这些场景我提到过啊,比如栈常用在函数调用发生时,形参压栈,保留现场信息(细节看:从零开始学习数据结构-->栈),以及递归转为非递归使用栈,队列下文会提到键盘缓冲区的本质上是循环队列。
1 队列
逻辑线性结构,先进先出 FIFO;入队列在队尾,出队列在队首;
队首等于队尾存在 2 种情况:
空队:刚刚做完出队列操作;
满队:刚刚做完入队列操作;
模型如下:

队列的实现:循环链表(物理非线性结构)、循环数组(物理线性结构)
2 循环队列

3 链式存储
思路:就是用 head 始终指向头结点,tail 始终指向尾结点,静态的模板变量,单链表实现,入队从尾 tail,出队从头 head;
模型如下:

(数组和链表实现队列,自己补充)
4 队列的应用
键盘缓冲区,实质上是循环队列;
I/O 缓冲区,在网络环境下,存在着连入网络的节点速度差异;在不进行任何处理的情况下,高速节点向低速节点所发出的数据,在低速节点不能及时处理的情况下会产生“数据淹没”现象(流量失控)。
为进行流量控制,通信双方设置缓冲区;接收方所接到的数据达到缓冲区的临界点时,向发送方发送“暂停发送”信号,等相关数据处理完毕后再向发送方发出“继续发送”的信号,流量控制是通过缓冲区实现的。
内容摘自微信公众号《编程剑谱》
来源:oschina
链接:https://my.oschina.net/u/4419899/blog/4290338