《数据结构与算法》PPT课堂课件-第4章-队列.pdf
《《数据结构与算法》PPT课堂课件-第4章-队列.pdf》由会员分享,可在线阅读,更多相关《《数据结构与算法》PPT课堂课件-第4章-队列.pdf(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2021/6/131第四章 队列队列和栈一样是一种特殊的线性表,是操作受限的线性表,称其为限定性数据结构。队列的定义及特点v定义:队列是限定只能在表的一端进行插入,在 表的另一端进行删除的线性表l队尾尾(rear)允许插插入入的一端l队头头(front)允许删删除除的一端v队列特点:先进先出(FIFO)2021/6/132a1 a2 a3.an 入队出队frontrear队列Q=(a1,a2,an)双端队列a1 a2 a3.an 端1端2入队出队入队出队2021/6/1334.1 ADT队列(Queue)ADT队列上定义的常用的基本运算(1)Empty( );(2)Full( );(3)Fir
2、st( );(4)Last();(5)EnQueue(x);(6)DeQueue(x); 2021/6/1344.2 链队列结点定义typedef struct qnode *qlink;typedef struct qnode QItem element; qlink next; QNode;2021/6/135frontrearx入队xfrontreary入队xyfrontrearx出队xyfront rear空队front reary出队2021/6/1364.3 队列的顺序存储结构实现:用一维数组实现sqMfront=-1rear=-1123450队空123450frontJ1,J1,
3、J3入队J1J2J3rearrear123450J4,J5,J6入队J4J5J6front设两个指针front,rear,约定:rear指示队尾元素;front指示队头元素前一位置初值front=rear=-1空队列条件:front=rear入队列:sq+rear=x;出队列:x=sq+front;rearrearfrontrear123450J1,J2,J3出队J1J2J3frontfrontfront2021/6/137存在问题设数组维数为M,则:当front=-1,rear=M-1时,再有元素入队发生溢出真真溢溢出出当front-1,rear=M-1时,再有元素入队发生溢出假假溢溢出出解
4、决方案队首固定,每次出队剩余元素向下移动浪费时间循环队列基本思想:把队列设想成环形,让sq0接在sqM-1之后,若rear+1=M,则令rear=0;0M-11frontrear.实现:利用“模”运算入队: rear=(rear+1)%M; sqrear=x;出队: front=(front+1)%M; x=sqfront;队满、队空判定条件2021/6/138012345rearfrontJ4J5J6012345rearfrontJ9J8J7J4J5J6012345rearfront初始状态J4,J5,J6出队J7,J8,J9入队队空:front=rear队满:front=rear解决方案:
5、1.另外设设一一个个标标志志以区别队空、队满2.少少用用一一个个元元素素空空间间: 队空:front=rear 队满:(rear+1)%M=front2021/6/139 4.4 队列的应用举例 【举例1】汽车加油站。 随随着着城城市市里里汽汽车车数数量量的的急急速速增增长长,汽汽车车加加油油站站也也渐渐渐渐多多了了起起来来。通通常常汽汽车车加加油油站站的的结结构构基基本本上上是是:入入口口和和出出口口为为单单行行道道,加加油油车车道道可可能能有有若若干干条条。每每辆辆车车加加油油都都要要经经过过三三段段路路程程,第第一一段段是是在在入入口口处处排排队队等等候候进进入入加加油油车车道道;第第二
6、二段段是是在在加加油油车车道道排排队队等等候候加加油油;第第三三段段是是进进入入出出口口处处排排队队等等候候离离开开。实实际际上上,这这三三段段都都是是队队列列结结构构。若若用用算算法法模模拟拟这这个个过过程程,就就需需要要设设置置加加油油车车道道数数加加2个个队队列列。2021/6/1310【举例2】模拟打印机缓冲区。 在在主主机机将将数数据据输输出出到到打打印印机机时时,会会出出现现主主机机速速度度与与打打印印机机的的打打印印速速度度不不匹匹配配的的问问题题。这这时时主主机机就就要要停停下下来来等等待待打打印印机机。显显然然,这这样样会会降降低低主主机机的的使使用用效效率率。为为此此人人们
7、们设设想想了了一一种种办办法法:为为打打印印机机设设置置一一个个打打印印数数据据缓缓冲冲区区,当当主主机机需需要要打打印印数数据据时时,先先将将数数据据依依次次写写入入这这个个缓缓冲冲区区,写写满满后后主主机机转转去去做做其其他他的的事事情情,而而打打印印机机就就从从缓缓冲冲区区中中按按照照先先进进先先出出的的原原则则依依次次读读取取数数据据并并打打印印,这这样样做做即即保保证证了了打打印印数数据据的的正正确确性性,又又提提高高了了主主机机的的使使用用效效率率。由由此此可可见见,打打印印机机缓缓冲冲区区实实际际上上就就是是一一个个队队列列结结构构。2021/6/1311【举例3】CPU分时系统
8、 在在一一个个带带有有多多个个终终端端的的计计算算机机系系统统中中,同同时时有有多多个个用用户户需需要要使使用用CPU运运行行各各自自的的应应用用程程序序,它它们们分分别别通通过过各各自自的的终终端端向向操操作作系系统统提提出出使使用用CPU的的请请求求,操操作作系系统统通通常常按按照照每每个个请请求求在在时时间间上上的的先先后后顺顺序序,将将它它们们排排成成一一个个队队列列,每每次次把把CPU分分配配给给当当前前队队首首的的请请求求用用户户,即即将将该该用用户户的的应应用用程程序序投投入入运运行行,当当该该程程序序运运行行完完毕毕或或用用完完规规定定的的时时间间片片后后,操操作作系系统统再再
9、将将CPU分分配配给给新新的的队队首首请请求求用用户户,这这样样即即可可以以满满足足每每个个用用户户的的请请求求,又又可可以以使使CPU正正常常工工作作。2021/6/1312队列应用举例 【举例4】划分子集问题问题描述:已知集合A=a1,a2,an,及集合上的关系R= (ai,aj) | ai,ajA, ij,其中(ai,aj)表示ai与aj间存在冲突关系。要求将A划分成互不相交的子集A1,A2,Ak,(kn),使任何子集中的元素均无冲突关系,同时要求分子集个数尽可能少例 A=1,2,3,4,5,6,7,8,9 R= (2,8), (9,4), (2,9), (2,1), (2,5), (6
10、,2), (5,9), (5,6), (5,4), (7,5), (7,6), (3,7), (6,3) 可行的子集划分为: A1= 1,3,4,8 A2= 2,7 A3= 5 A4= 6,9 2021/6/1313算法思想:利用循环筛选。从第一个元素开始,凡与第一个元素无冲突的元素划归一组;再将剩下的元素重新找出互不冲突的划归第二组;直到所有元素进组所用数据结构冲突关系矩阵rij=1, i,j有冲突rij=0, i,j无冲突循环队列cqn数组resultn存放每个元素分组号工作数组newrn2021/6/1314工作过程初始状态:A中元素放于cq中,result和newr数组清零,组号gro
11、up=1第一个元素出队,将r矩阵中第一行“1”拷入newr中对应位置,这样,凡与第一个元素有冲突的元素在newr中对应位置处均为“1”,下一个元素出队若其在newr中对应位置为“1”,有冲突,重新插入cq队尾,参加下一次分组若其在newr中对应位置为“0”, 无冲突,可划归本组;再将r矩阵中该元素对应行中的“1”拷入newr中如此反复,直到9个元素依次出队,由newr中为“0”的单元对应的元素构成第1组,将组号group值“1”写入result对应单元中令group=2,newr清零,对cq中元素重复上述操作,直到cq中front=rear,即队空,运算结束2021/6/1315算法描述0 1
12、 0 0 0 0 0 0 00 1 0 1 1 0 0 0 00 0 0 0 0 1 1 0 00 0 0 0 1 0 0 0 10 1 0 1 0 1 1 0 10 1 1 0 1 0 1 0 00 0 1 0 1 1 0 0 00 1 0 0 0 0 0 0 01 0 0 0 1 1 0 1 1R=1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 cqf r0 0 0 0 0 0 0 0 00 1 2 3 4 5 6 7 8 newr0 0 0 0 0 0 0 0 00 1 2 3 4 5 6 7 8 result初始R= (2,8), (9,4), (2,9), (2
13、,1), (2,5), (6,2), (5,9), (5,6), (5,4), (7,5), (7,6), (3,7), (6,3) 2021/6/1316算法描述0 1 0 0 0 0 0 0 00 1 0 1 1 0 0 0 00 0 0 0 0 1 1 0 00 0 0 0 1 0 0 0 10 1 0 1 0 1 1 0 10 1 1 0 1 0 1 0 00 0 1 0 1 1 0 0 00 1 0 0 0 0 0 0 01 0 0 0 1 1 0 1 1R= 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 cqfr0 1 0 0 0 0 0 0 00 1 2 3
14、4 5 6 7 8 newr1 0 0 0 0 0 0 0 00 1 2 3 4 5 6 7 8 resultR= (2,8), (9,4), (2,9), (2,1), (2,5), (6,2), (5,9), (5,6), (5,4), (7,5), (7,6), (3,7), (6,3) 2021/6/1317算法描述0 1 0 0 0 0 0 0 00 1 0 1 1 0 0 0 00 0 0 0 0 1 1 0 00 0 0 0 1 0 0 0 10 1 0 1 0 1 1 0 10 1 1 0 1 0 1 0 00 0 1 0 1 1 0 0 00 1 0 0 0 0 0 0 01
15、 0 0 0 1 1 0 1 1R= 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 cqfr0 1 0 0 0 0 0 0 00 1 2 3 4 5 6 7 8 newr1 0 0 0 0 0 0 0 00 1 2 3 4 5 6 7 8 resultR= (2,8), (9,4), (2,9), (2,1), (2,5), (6,2), (5,9), (5,6), (5,4), (7,5), (7,6), (3,7), (6,3) 2021/6/1318算法描述0 1 0 0 0 0 0 0 00 1 0 1 1 0 0 0 00 0 0 0 0 1 1 0 00 0 0
16、 0 1 0 0 0 10 1 0 1 0 1 1 0 10 1 1 0 1 0 1 0 00 0 1 0 1 1 0 0 00 1 0 0 0 0 0 0 01 0 0 0 1 1 0 1 1R= 2 4 5 6 7 8 90 1 2 3 4 5 6 7 8 cqfr0 1 0 0 0 1 1 0 00 1 2 3 4 5 6 7 8 newr1 0 1 0 0 0 0 0 00 1 2 3 4 5 6 7 8 resultR= (2,8), (9,4), (2,9), (2,1), (2,5), (6,2), (5,9), (5,6), (5,4), (7,5), (7,6), (3,7)
17、, (6,3) 2021/6/1319算法描述0 1 0 0 0 0 0 0 00 1 0 1 1 0 0 0 00 0 0 0 0 1 1 0 00 0 0 0 1 0 0 0 10 1 0 1 0 1 1 0 10 1 1 0 1 0 1 0 00 0 1 0 1 1 0 0 00 1 0 0 0 0 0 0 01 0 0 0 1 1 0 1 1R= 2 5 6 7 8 90 1 2 3 4 5 6 7 8 cqfr0 1 0 0 1 1 1 0 10 1 2 3 4 5 6 7 8 newr1 0 1 1 0 0 0 0 00 1 2 3 4 5 6 7 8 resultR= (2,8)
18、, (9,4), (2,9), (2,1), (2,5), (6,2), (5,9), (5,6), (5,4), (7,5), (7,6), (3,7), (6,3) 2021/6/1320算法描述0 1 0 0 0 0 0 0 00 1 0 1 1 0 0 0 00 0 0 0 0 1 1 0 00 0 0 0 1 0 0 0 10 1 0 1 0 1 1 0 10 1 1 0 1 0 1 0 00 0 1 0 1 1 0 0 00 1 0 0 0 0 0 0 01 0 0 0 1 1 0 1 1R= 2 5 6 7 8 90 1 2 3 4 5 6 7 8 cqfr0 1 0 0 1 1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构与算法 数据结构 算法 PPT 课堂 课件 队列
限制150内