数据结构 | 队列

队列

1. 队列的定义:队列是一个有序列表(ordered list),而且所有添加动作只能在一个特定的入口进行,删除动作只能在一个特定的出口进行。

2. 队列的应用有:

  •    计算机系统处理打印的工作。
  •    CPU 提供的分时(time sharing)工作方式。
  •    键盘缓冲区的应用。

3. 队列的数据是有序列表, 而且是一个接着一个, 所以用数组来表示队列,按队列所要存放的数据是文字或数字来定义队列,例如文字时用 char 类型,数字时用 int 类型等。

如 char queue[100] 或 int queue[100]。队列另外还需3个产量辅助其操作,一个是队列最大容量 maxq,另一个是队首位置 front,另一个是队尾位置 rear,这3者般是数字类型,一般 front 和 rear 的初始值是-1。

4. 队列因为有入口和出口可以移动数据,所以队列的基本操作有两种:添加数据 addq 和删除数据 delq。

5. 以数组来表示的线性队列,在 addq()算法中, rear 会一直往后增加,当 rear ==maxq -1 时,表示队列已满,不能再加入数据;在 delq()算法中,front 会一直往后增加, rear == front 时,表示队列已空了,不能再删除数据。

6. 除非这个队列确实每个位置都放入了数据,才是“队列已满”,或队列中没有任何数据可供删除时,才是“队列已空”,否则队列可以一直运转,这种队列结构称为循环队列(circular queue)。

7. 以数组来表示的循环队列,在addq()算法中,rear 会一直增加,然后根据数组大小取余数,所以当(rear+1 % maxq)== front 时,即表示队列已满,不能再加入数据;在delq()算法中,front 会一直往后增加, 然后根据数组大小取余数,当 rear == front 时,表示队列已空了,不能再删除数据。

8. 队列结构经常用在计算机系统的运作中,例如 CPU 的时间安排、接口设备的I/O中断、操作系统(如Windows)的事件处理(如按鼠标键、移动鼠标、键盘输入等事件)、或者打印机打印队列等。一般不会只用单一队列,不会是“先到先处理”的方式,而是会同时应用多种策略,例如优先级高者先执行,最久未被处理的先执行,处理量(处理时间)最少(短)者优先处理,所以队列要稍加调整才能应对上述的问题。

9. 线性队列和循环队列只能有唯一的入口和唯一的出口,此称为单向队列(single-end-queue),队列可加以变化成为两端都可作为入口和出口的双向队列(double-end-queue, dqueue)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值