资源简介 (共29张PPT)3.2 队列概念特征操作应用情景创设分析食堂打饭为什么需要排队,这样做有什么好处?银行取号系统和叫号系统是怎么实现的,试着剖析其实现原理?队列概念是一种“先进先出”的线性表允许插入的一端称为队尾,插入叫入队允许删除的一端称为队首,删除叫出队队列中的数据称为队列元素a1 优先入队,紧接着 a2、a3...an 按照顺序依次进入队列特征(1)先进先出,后进后出元素入队顺序和元素出队顺序一致(2)有限序列性:队列元素个数有限队列可以为空,也可以包含多个元素,队首元素只有一个后继点,队尾元素只有一个前驱点,其他元素既有一个前驱点,又有一个后继点。1.小明点的外卖下单后,订单等待被处理2.机场安检时,排在最前面的人员被告知前往相应位置进行安检3.由于来餐厅用餐的人数较多,餐厅让客人排队用餐4.为控制游客的数量,管理人员告知后来的人员无法入园,不必再排队购票,已排队中的人员继续排队购票5.经过疏导,某车道拥堵车辆已经全部放行,且现在道路上无任何车辆A.队列满 B.入队 C.出队 D.建队 E.队列空BCDAE队列操作(建队)例:有4个字母“A”“B”“C”“D”按序入队,可创建长度为5的队列que:代码示例:que=[“”]*5head=0tail=0队列按顺序结构存储,通过数组实现,所以Python可使用列表创建队列que的下标0 1 2 3 40 1 2 3 4队列操作(入队)头指针head记录队首尾指针tail记录队尾元素的下一个位置que的下标A0 1 2 3 4A B0 1 2 3 4que[tail]=”A” #A入队tail=tail+1 #tail=1A B0 1 2 3 4队列操作(入队)头指针head记录队首尾指针tail记录队尾元素的下一个位置que的下标que[tail]=”A” #A入队tail=tail+1 #tail=1que[tail]=”B” #B入队tail=tail+1 #tail=2A B C0 1 2 3 4队列操作(入队)头指针head记录队首尾指针tail记录队尾元素的下一个位置que的下标que[tail]=”A” #A入队tail=tail+1 #tail=1que[tail]=”B” #B入队tail=tail+1 #tail=2que[tail]=”C” #C入队tail=tail+1 #tail=3A B C D0 1 2 3 4队列操作(入队)头指针head记录队首尾指针tail记录队尾元素的下一个位置que的下标入队结束后,head=0, tail=4que[tail]=”A” #A入队tail=tail+1 #tail=1que[tail]=”B” #B入队tail=tail+1 #tail=2que[tail]=”C” #C入队tail=tail+1 #tail=3que[tail]=”D” #D入队tail=tail+1 #tail=4队列操作(入队)程序实现A B C D0 1 2 3 4队列操作(出队)que的下标出队,排在队首的元素依次出队,head指针变量依次加1,直至head的值等于tail的值B C D0 1 2 3 4队列操作(出队)que的下标出队,排在队首的元素依次出队,head指针变量依次加1,直至head的值等于tail的值C D0 1 2 3 4队列操作(出队)que的下标出队,排在队首的元素依次出队,head指针变量依次加1,直至head的值等于tail的值D0 1 2 3 4队列操作(出队)que的下标出队,排在队首的元素依次出队,head指针变量依次加1,直至head的值等于tail的值0 1 2 3 4队列操作(出队)que的下标出队,排在队首的元素依次出队,head指针变量依次加1,直至head的值等于tail的值当head==tail 时,队列数据出空例.小明在使用队列解决问题的过程中,初始时(空队列),队列的队首指针head=0,队尾指针tail=0,经过一系列入队、出队操作后,head=4,tail=7。在不考虑队列溢出的情况下,小明接下来进行的操作序列为出队、人队、出队、出队、入队、出队,此时head和tail的值分别为head=8tail=9练习巩固:作业本p98第8题给定一个字符串S1,S2,…..Sn,按如下过程加密:取出第一个字符S1,将第二个字符S2放到字符串的末尾Sn后面,得到字符串S3…..Sn,S2;接着把S3取出,S4放到字符串的末尾S2后面,直到最后一个字母Sn被取出。这些字母按取出的顺序形成一个新的字符串,称为密串,请编写一个加密程序,输入一个字符串(长度小于等于100),输出该字符串的密串。队列应用1:信息的加密2. 加密字符串:出队、入队操作先取出队首元素“S”并输出,同时head+1,队首元素变为“T”再取出“T”,加入到队尾,队首变为“R”,队尾变为“T”,head和tail均加1重复以上操作,直至队列为空head=tail算法分析,以“STRING”为例队列que索引 0 1 2 3 4 5 6 7 8 9 10 11取出取出取出取出取出取出head=tail队列清空1. 将字符串各字符依次入队,得到队列。算法分析,以“STRING”为例s=input(“请输入字符串:”)que=[“”]*100head=0tail=0for i in range(len(s)):que[tail]=s[i]tail+=1代码分析:while headprint(que[head],end="")head+=1if headque[tail]=que[head]tail+=1head+=1队列应用2:银行叫号排队系统que=[-1]*1000head=0tail=0print("请输入具体的操作编号:")print("1.新到顾客(取号)")print("2.下一个顾客(叫号)")print("3.程序结束")x=int(input((“请输入操作\n”))) #\n表示换行读取while x!=3:if x==1:que[tail]=que[tail]+1print("您当前的号码为:A%d,需要等待的人数为%d"%(tail,tail-head))tail=tail+1if x==2:if head==tail:print("对不起,没有等待的客户")else:print("请A%d号客户准备,马上将为您办理业务。"%(head))head=head+1x=int(input("请输入操作\n")) #\n表示换行读入假溢出问题:0 1 2 3 4A B C D队列q索引headtailABC出队E入队E56循环队列tail = (tail+1) % len(q)假溢出问题:分析下列程序,输出结果que=[""]*4head=0tail=0que[tail]="A"tail=(tail+1)%4que[tail] = "B"tail = (tail+1) % 4que[tail] = "C"tail = (tail+1) % 4que[tail] = "D"tail = (tail+1) % 4que[tail] = "E"tail = (tail+1) % 4print(que)结论:假溢出现象可通过对队列元素个数取模运算解决['E', 'B', 'C', 'D']队列知识总结队列的概念及特征队列的操作队列的应用 展开更多...... 收起↑ 资源预览