首页 > 其他分享 >数据结构(4):队列(下)

数据结构(4):队列(下)

时间:2022-11-29 19:34:05浏览次数:41  
标签:遍历 队列 主机 打印 缓冲区 数据结构 CPU


上回说到,队列是一个先进先出的操作受限的线性表。这一回,我们看到队列的两个常见的应用:层次遍历和在计算机系统中的应用。





数据结构(4):队列(下)_计算机系统

队列在层次遍历中的应用

数据结构(4):队列(下)_层次遍历_02


在信息处理中有一大类问题需要逐层或逐行处理。这类问题的解决方法往往是在处理当前层或当前行时就对下一层或下一行做预处理,把处理顺序安排好,待当前层或当前行处理完毕,就可以处理下一层或下一行。使用队列是为了保存下一步的处理顺序。下面用二叉树(如图所示)层次遍历的例子,说明队列的应用。下表显示了层次遍历二叉树的过程。

数据结构(4):队列(下)_数据_03

层次遍历二叉树的过程


说明

队内

队外

1

A 入

A


2

A 出,BC 入

BC

A

3

B 出,D 入

CD

AB

4

C 出,EF 入

DEF

ABC

5

D 出,G 入

EFG

ABCD

6

E 出,HI 入

FGHI

ABCDE

7

F 出

GHI

ABCDEF

8

GHI 出


ABCDEFGHI

该过程简单描述如下:

  1. 根结点入队。
  2. 若队空(所有节点都已处理完毕),则结束遍历;否则重复 3 操作。
  3. 队列中第一个结点出队,并访问之。若其有左孩子,则将左孩子入队;若其有右孩子,则将右孩子入队,返回 2。


数据结构(4):队列(下)_计算机系统

队列在计算机系统中的应用

数据结构(4):队列(下)_层次遍历_02


队列在计算机系统中的应用非常广泛,以下仅从两个方面来简述队列在计算机系统中的作用:第一个方面是解决主机与外部设备之间速度不匹配的的问题,第二个方面是解决由多用户引起的资源竞争问题。

对于第一个方面,仅以主机和打印机之间速度不匹配的问题为例作简要说明。主机输出数据给打印机打印,输出数据的速度比打印数据的速度要快得多,由于速度不匹配,若直接把输出的数据送给打印机打印显然是不行的。解决的办法是设置一个打印数据缓冲区,主机把要打印输出的数据依次写入缓冲区,写满后就暂停输出,转去做其他的事情。打印机就从缓冲区中按照先进先出的原则依次取出数据并打印,打印完后再向主机发出请求。主机接到请求后再向缓冲区写入打印数据。这样做既保证了打印数据的正确,又使主机提高了效率。由此可见,打印数据缓冲区中所存储的数据就是一个队列。

对于第二个方面,CPU(即中央处理器,它包括运算器和控制器)资源的竞争就是一个典型的例子。在一台带有多终端的计算机系统上,有多个用户需要 CPU 各自运行自己的程序,他们分别通过各自的终端向操作系统提出占用 CPU 的请求。操作系统通常按照每个请求在时间上的先后顺序,把它们排成一个队列,每次把 CPU 分配给队首请求的用户使用。当相应的程序运行结束或用完规定的时间间隔后,令其出队,再把 CPU 分配给新的队首请求的用户使用。这样既能满足每个用户的请求,又使 CPU 能够正常运行。


数据结构(4):队列(下)_计算机系统

总结

数据结构(4):队列(下)_层次遍历_02


关于队列的应用就说到这里,下一回我们看一种大家都非常熟悉的数据结构——数组!

当然,我从今年开始已经入驻 B 站了!下面给出 B 站账号:新时代的运筹帷幄,喜欢的可以关注一下,看完视频不要忘记一键三连啊!

今天的文章有不懂的可以后台回复“加群”,备注:Python 机器学习算法说书人,不备注可是会被拒绝的哦~!



数据结构(4):队列(下)_数据_08





标签:遍历,队列,主机,打印,缓冲区,数据结构,CPU
From: https://blog.51cto.com/u_15829940/5896593

相关文章

  • 数据结构(5):数组
    上一回简单的说了一下队列两个常见的应用:层次遍历以及在计算机系统中的应用,这一回,我们来看一个大家都非常熟悉的数据结构:数组!数组的定义数组是由n(n≥1)个相同类型的数据元素......
  • SQL注入问题、视图、触发器、事务、存储过程、函数、函数、索引相关概念、索引数据结
    目录SQL注入问题视图触发器事务存储过程函数函数索引相关概念索引数据结构慢查询优化测试索引联合索引全文检索插入数据更新数据删除数据主键外键重命名表事务安全管理隔离......
  • C++数据结构和算法:位运算、字符串
    --------------------------------位运算---------------------------------Q1.用位运算交换两个值前提:要交换的两个值是独立内存voidSwap(int&a,int&b){a......
  • 数据结构(1) pair和map使用
         #include<iostream>#include<thread>#include<map>#include<algorithm>#include<vector>#ifdeflniux#include<unistd.h>//usleep(100......
  • 【剑指Offer】数据结构
    文章目录​​励志​​​​一、剑指Offer05.替换空格​​​​题:​​​​解:​​​​二、剑指Offer06.从尾到头打印链表​​​​题:​​​​解:​​​​三、剑指Offer09.......
  • PTA 21级数据结构与算法实验8—排序
    目录7-1统计工龄7-2寻找大富翁7-3点赞狂魔7-4插入排序还是归并排序7-5插入排序还是堆排序7-6逆序对7-7堆排序7-8石子合并7-9第k小7-10快速排序的过程7-1统计工......
  • 代码随想录算法训练营Day10|232. 用栈实现队列、225. 用队列实现栈
    代码随想录算法训练营Day10|232.用栈实现队列、225.用队列实现栈232.用栈实现队列题目链接:232.用栈实现队列题目要求"假设所有操作都是有效的(例如,一个空的队列不会......
  • go源码学习(一):数据结构-数组
    数组是相同类型元素的集合,在内存中对应一块连续的内存空间。数组类型是通过存储的元素类型以及能够存储的大小两个维度来决定的,一旦声明之后大小就不可更改。初始化go语......
  • 打印队列(Printer Queue)
    PrinterQueueTimelimit:3.000seconds【分析】      首先记录所求时间它在队列中的位置,用一个队列存储这些任务的优先级,同时也创建一个队列存储对应任务一开始的......
  • 【779】R语言数据结构
    1.向量向量从数据结构上看就是一个线性表,可以看成一个数组。c()是一个创造向量的函数。R语言中的"下标"不代表偏移量,而代表第几个,也就是说是从1开始的!seq......