资源简介 4.2 队 列学习目标 1.通过生活实例,理解队列的性质和作用。2.在理解队首和队尾指针的功能上,掌握队列和循环队列元素个数的计算方法。3.在理解队首和队尾指针的功能上,掌握建队、入队和出队的操作过程。(2023年6月浙江省选考)列表q长度为20,q[0]至q[4]的值依次为'p','r','i','n','t',执行如下程序段后,输出的最后一个字符为( )head,tail=0,5while head if head % 3==0: print(q[head]) else: q[tail]=q[head] tail+=1 head+=1A.t B.nC.i D.r 队列是一种先进先出的线性表,允许插入的一端称为队尾,允许删除的一端称为队首。先进先出是队列的特性,若元素出队后将入队,那么入队后的元素还是维持原来的顺序。建队时,指针head和tail均指向0,head加1表示出队,tail加1表示入队。判断队列是否空的条件是head!=tail,判断队列中元素的数量为tail-head。例1 有1个队列,队首到队尾的元素依次为8,3,2,9,5。约定:T操作是指队列中1个元素出队后再入队,Q操作是指队列中1个元素出队。则经过TTTQTTQ系列操作后,队列中队首到队尾的元素依次为( )A.2,9,5 B.2,5,8C.5,8,2 D.8,3,2变式1 利用队列实现字符串换位加密,列表k中各元素依次为加密过程中的操作,p表示出队,q表示出队后入队。若队列中元素从队首至队尾依次为“t”“r”“a”“i”“n”,k为[q,p,q,q,p,p,q,p,p],则加密后的出队结果为( )A.“tanri” B.“niart”C.“ritan” D.“rntia”例2 有如下Python程序段:import randomq=[0]*8head,tail=0,4for i in range(4): k=random.randint(0,10) if k%2==0: q[tail]=k%5 tail+=1 else: head+=1while head print(q[head],end=" ") head+=1程序运行后,输出结果可能为( )A.0 0 0 0 2 3 0 6 B.0 1 2 3 4C.0 0 0 0 D.2 4变式2 有如下Python程序:a=[4,2,5,1,9]que=[0]*(2*len(a))head,tail=0,0for i in range(0,len(a)): if head==tail or a[i] que[tail]=a[i] tail+=1 elif a[i]>que[tail-1]: que[tail]=a[i] tail+=1;head+=1print(que[head:tail])执行以上程序段后,输出结果是( )A.4,7 B.5,1,9C.2,5,1,9 D.4,7,2,5,1,91.有一个队列S,其中指针head指向队首元素的位置,指针tail指向队尾元素的下一个位置。关于该队列说法正确的是( )A.队列中元素个数为tail-head+1B.新元素入队时,指针head向右移动C.元素出队时,指针tail向右移动D.当tail==len(S)时,无法再入队新元素2.某队列的数据结构如图所示,head和tail分别为队列的头、尾指针。现对该队列进行以下操作:①队首元素出队输出②队首元素出队再入队,重复①②操作直到队列为空。若队列数据元素为“CHINA”,则输出顺序是( )A.CIANH B.CIAHNC.CAHNI D.CHINA3.给一个队列如下约定:T操作是指队列中1个元素出队后再入队,P操作是指1个元素入队。原始队列经过TTPTP系列操作后,队列中队首到队尾的元素依次为ABCDE,则原始队列中队首到队尾的元素依次为( )A.ABC B.ABDC.BAE D.BADEC4.有1个队列,队首到队尾的元素依次为8,10,12,9。若队首元素是偶数则先出队,再将偶数整除2后重新入队,若队首元素是奇数,直接出队。入队或出队各算一次操作,经过6次操作后,队列中队首到队尾的元素依次为( )A.2,3 B.6,2,3C.9,4,5 D.9,4,5,65.有2个队列a和b,队首到队尾的元素依次分别为“5,7,9”和“6,4,8”。约定:T操作是指队列a中1个元素先出队,若大于队列b的队首元素则再入b队列,否则不入;Q操作是指队列b中1个元素先出队,若大于队列b的队尾元素则再入b队列,否则不入。则经过TTQQQQT系列操作后,队列b中的元素个数为( )A.1 B.2C.3 D.46.元素1,2,3,4依次按先后顺序准备入队。约定:P操作是指1个入队,T操作是指队列中1个元素出队后再入队,Q操作是指队列中1个元素出队。则经过PPTQTPQ系列操作后,队列中队首到队尾的元素依次为( )A.1 B.1,3C.3,4 D.37.队列Q从队首到队尾的元素依次为5、2、7、3、6,栈S初始为空。约定:若栈为空或者队首元素小于栈顶元素,那么队首元素出队并入栈;否则,将栈内所有小于队首元素的元素依次出栈并入队,然后将队首元素出队并入栈。反复执行上述操作,直到队列为空。最终,栈S中从栈顶到栈底的元素依次为( )A.2、3、5、6、7 B.7、6、5、3、2C.7、6、5、2、3 D.5、2、7、3、68.队列Q中的元素依次为1,2,3,4,栈S为空。约定:P操作是队首元素出队后入栈,B操作是队首元素出队后入队,T操作是指栈顶元素出栈后入队。执行操作PPBT后,队列Q中的元素依次为( )A.4,3,2 B.4,2,3C.4,3,1 D.4,2,19.执行如下程序段后,变量length的值为( )s="engineer";q=[""]*len(s)head,tail=0,0length=0for x in s: while x in q[head:tail]: head+=1 q[tail]=x;tail+=1 if tail-head>length: length=tail-headA.2 B.3C.4 D.510.某Python程序如下:q=[""]*50;head=tail=0s="ningbo"for i in s: q[tail]=i;tail+=1while head print(q[head],end="") head+=1 for i in range(3): q[tail]=q[head] head+=1;tail+=1执行该程序段后,输出结果为( )A.nbgoni B.nbogniC.goninb D.ningbo11.某Python程序段如下:s="h#Ap#py"que=[""]*10;res=""head,tail=0,0for i in range(len(s)): if 'a'<=s[i]<='z': que[tail]=s[i] tail+=1 elif head head+=1print(que[head:tail])执行该程序段,输出的结果是( )A.['h','p','p','y']B.['p','p','y']C.['p','y']D.['y']12.有如下程序段:head=0;tail=5que=['a','b','c','d','e']while head+1 if head%4!=0: que.append(que[head]) tail+=1 head+=1print(que[head])执行如下程序段后,最后输出的内容为( )A.a B.bC.c D.d13.有如下Python程序段:s="abcdddbha"que=[""]*10;head=tail=0for i in range(len(s)): if s[i] not in que[head:tail]: que[tail]=s[i] tail+=1 else: head+=1print(que[head:tail])程序运行后,输出的结果是( )A.['a','b','c','d','h']B.['a','b','c','d','d']C.['c','d','b','h','a']D.['a','d','d','d','a']14.列表q长度为20,q[0]到q[7]的值依次为'a','b','c','a','c','d','d','e',执行如下程序段后,输出的结果为( )head=tail=0for i in range(8): if q[i]==q[head] and head!=tail: tail+=1 head=tail else: tail+=1print(q[head:tail])A.cdde B.acddeC.eddc D.e15.有如Python程序段:a=[3,1,-6,0,-1,5,2,-5,1,3]n=len(a);q=[0]*nhead,tail=0,0for i in range(0,n): if head if q[head]+a[i]>0: q[tail]=q[tail-1]+a[i] tail+=1 else: head=tail else: if a[i]>0: q[tail]=a[i] tail+=1print(tail-head)执行以上程序段后,输出的结果为( )A.2 B.3C.5 D.616.有如下Python程序段:import randomque=["a","b","c","d","","","","","",""]head=0;tail=4;ans=""for i in range(5): if random.randint(0,1)==0: ans+=que[head] que[tail]=que[head] head+=1 tail+=1 else: head+=1执行该程序段后,ans的值不可能是( )A."bcc" B."aa"C."bcdb" D."abcd"17.有如下Python程序段:import randomque=[0]*10head=0;tail=5 #定义队列的首尾指针for i in range(5): k=random.randint(0,10) if k%2==0: head+=1 else: que[tail]=i%3 tail+=1while head print(que[head],end=" ") head+=1运行如下程序段后,输出结果不可能是( )A.0 0 0 2 B.0 0 1 2C.0 1 0 2 D.0 01.某队列中的元素依次为"R","o","u","t","e","r",将反复对队内元素做如下操作,直到队列元素为空:①队首元素出队并在队尾入队;②队首元素出队并输出。则输出顺序为( )A.Rueort B.ReorutC.otruRe D.otrueR2.有1个队列,队首到队尾的元素依次为1,2,3,4,5。约定:T操作是指队列中1个元素出队后再入队,Q操作是指队列中1个元素出队。则经过TTQTTQTTQ系列操作后,队列中队首到队尾的元素依次为( )A.4,5 B.5,4C.2,4 D.4,23.约定:T操作是指在队列中1个元素出队后再入队,E操作是指将1个元素入队,P操作是指队列中1个元素出队,队首指针head和队尾指针tail初始值均为0。则经过EETPETEP系列操作后,队首指针head和队尾指针tail的值分别为( )A.3 4 B.3 5C.4 5 D.4 64.有1个队列,队首到队尾的元素依次为1,2,3,4,5,6,7。现进行如下操作:①出队2个元素;②再出队1个元素并将该元素入队。重复以上操作,直至队列中仅剩1个元素。则该元素是( )A.3 B.5C.6 D.75.队列S有若干元素。约定:U操作是指出队,H操作是指元素出队后再入队。经过UHUHHU操作后,队列中队首到队尾的元素依次为4,1,3,则队列S初始状态中队首到队尾的元素可能为( )A.1,1,4,4,3,3 B.4,4,1,1,3,3C.1,4,3,1,4,3 D.3,1,4,3,1,46.有“甲乙丙丁戊”5位游客已按序排队,定义下列操作:顺利买票进入景区,记为Q1;缺少证件需要重新排队,记为Q2;新游客进来排队,记为Q3。若游客“丁”买票时,发现游客“乙”在“丁”的后两位(乙和丁之间还有一位游客),则已进行的操作过程可能是( )A.Q3,Q1,Q2,Q1 B.Q1,Q2,Q2,Q3C.Q1,Q2,Q3,Q3 D.Q2,Q2,Q1,Q37.现有一队列"ECBAD"可以进行如下两种操作:①队首出队后入队②队首出队进入结果区。要求结果区为"ABCDE",则元素"D"被执行①操作的次数至少为( )A.1 B.2C.3 D.48.有两个队列Q1与Q2,初始都为空,经过一系列入队、出队操作(数据全部入队后,才能进行出队操作),若元素入队的顺序是a,b,c,d,e,则不可能的出队序列是( )A.acbde B.ebcdaC.abcde D.daebc9.数据S1至S4的优先级依次为3,4,1,2,某设备按优先级1至4依次发送数据,利用队列S组织数据并模拟发送过程,初始队首至队尾数据依次为:S1、S4、S3、S2。可利用操作M(出队后再入队)调整数据发送顺序,为将数据发送完毕,则M的执行次数至少为( )A.4 B.5C.6 D.710.有如下Python程序:a=[13,12,12,15,26,23,36]que=[0]*len(a)head=tail=0for x in a: while head if x tail-=1 else: break que[tail]=x tail+=1print(que[head:tail])执行后,程序输出结果为( )A.12 15 26 36 B.12 15 23 26C.12 12 15 23 36 D.12 13 15 23 3611.某Python程序段如下:s="21027,53523,042,";ans=""q=[0]*100;head=tail=0for i in range(len(s)): if "0"<=s[i]<="9": q[tail]=s[i];tail+=1 elif s[i]==",": flag=True while head ans+=q[head];head+=1 if head!=tail and flag: head+=1 flag=not flag执行该程序段后,变量ans的值为( )A."20735204" B."20255202"C."20755302" D."20235304"12.有如下Python程序段:s="ABCDEF";que=[""]*10head=0;tail=0for i in range(len(s)): if i % 2==0: que[tail]=s[len(s)-1-i] else: que[tail]=s[i-1] tail=tail+1while head print(que[head],end="") head+=1该程序运行后输出的结果为( )A.FAEBDC B.FADCBEC.FBDDBF D.FDBACE13.有如下Python程序段:s=input()d=[-1]*10;head=tail=0for i in range(len(s)): if d[int(s[i])] if tail-head==3: head+=1 d[int(s[i])]=tail tail+=1若执行程序后,d的值为[-1,4,6,5,3,-1,-1,-1,-1,-1],则输入的s值可能是( )A."6954132" B."11114132"C."1324132" D."41341322"14.有如下程序段:m=3;n=7head=tail=0;ans=0vis=[0]*10;q=[0]*10for i in range(n): x=int(input()) if vis[x]==0: ans+=1 if tail-head>=m: vis[q[head]]=0 head+=1 q[tail]=x;tail+=1 vis[x]=1print(ans)运行该程序段,依次输入x的值:1,2,1,5,4,4,1。则程序运行完成后ans的值是( )A.3 B.4C.5 D.615.有如下Python程序段:from random import randintn=5;q=[0]*nhead=tail=randint(0,n-1)while head!=tail+1: num=randint(1,n) if q[head]!=num: q[tail]=num tail+=1 if tail==n:tail=0 else: q[head]=0;head+=1 if head==n:head=0执行该程序段后,列表q可能为( )A.[1,2,3,4,5] B.[3,0,1,4,1]C.[5,0,1,2,3] D.[1,0,0,4,3]16.有如下Python程序段:from random import randintq=[1,2,14,5,6,7,9,10]head=0;tail=len(q)-1;ans=0m=randint(1,3)q+=[0]*mfor i in range(m): for j in range(2**i-1): head+=1 ans+=q[head] q[tail]=q[head] head+=1;tail+=1执行该程序段后,变量ans的值不可能是( )A.1 B.15C.24 D.3417.执行下列Python程序段,输出结果为( )data=[1,2,3,1,2,3]que=[0]*10;head=tail=0for i in range(len(data)): if data[i] % 2!=0: que[tail]=data[i] tail+=1 elif tail-head>1: que[tail-1]+=que[head] head+=1print(que[head: tail])A.[3,2,1] B.[1,2,3]C.[1,3,1] D.[3,2,3]18.有如下Python程序段:que=["A","B","C","D","E"]+[""]*10n=5;head=0;tail=5for i in range(n): print(que[head],end="") head+=1 for j in range(i): que[tail]=que[head] tail+=1 head+=1执行该程序段后,显示的结果是( )A.ACBED B.ABDCEC.ABDEC D.ACBDE19.执行如下程序段后,输出的结果是( )q=[6,8,9,7,4,5,2,3]pre=10head,tail=0,len(q)while head!=tail: if pre>q[head]: pre=q[head] print(q[head],end=' ') head+=1A.6 8 9 B.6 4 2C.6 5 3 D.620.有如下Python程序段:import randomq=[0]*5head=tail=0for i in range(5): if random.randint(0,1)==0: q[tail]=random.randint(1,9) tail+=1 elif head!=tail and q[tail-1] q[tail]=q[head] head+=1 tail+=1执行该程序段后,q的值不可能是( )A.[0,0,0,0,0] B.[5,4,3,2,1]C.[5,8,3,0,0] D.[0,5,6,0,0]21.有如下Python程序段:q=[i for i in range(7)]head,tail=1,0;cnt=0while (head+1)%7!=tail: cnt+=1 if cnt==3: cnt=0 else: q[tail]=q[head] tail=(tail+1)%7 head=(head+1)%7print(q[head])运行该程序段后,输出结果是( )A.5 B.4C.2 D.14.2 队 列学习目标 1.通过生活实例,理解队列的性质和作用。2.在理解队首和队尾指针的功能上,掌握队列和循环队列元素个数的计算方法。3.在理解队首和队尾指针的功能上,掌握建队、入队和出队的操作过程。(2023年6月浙江省选考)列表q长度为20,q[0]至q[4]的值依次为'p','r','i','n','t',执行如下程序段后,输出的最后一个字符为( )head,tail=0,5while head if head % 3==0: print(q[head]) else: q[tail]=q[head] tail+=1 head+=1A.t B.nC.i D.r答案 D解析 本题考查队列的基本操作。队列每次出队一个元素,若head是3的倍数时,输出队首元素,否则将队首元素入队,p出队并输出,r和i出队后入队,队列中元素依次为ntri,head值为3;n出队并输出,t和r出队后入队,队列中元素依次为itr,head值为6;i出队并输出,t和r出队后入队,队列中元素依次为tr,head值为9;t出队,队列中只剩下元素r,r连续两次出队后再入队,当head为12时,r出队。 队列是一种先进先出的线性表,允许插入的一端称为队尾,允许删除的一端称为队首。先进先出是队列的特性,若元素出队后将入队,那么入队后的元素还是维持原来的顺序。建队时,指针head和tail均指向0,head加1表示出队,tail加1表示入队。判断队列是否空的条件是head!=tail,判断队列中元素的数量为tail-head。例1 有1个队列,队首到队尾的元素依次为8,3,2,9,5。约定:T操作是指队列中1个元素出队后再入队,Q操作是指队列中1个元素出队。则经过TTTQTTQ系列操作后,队列中队首到队尾的元素依次为( )A.2,9,5 B.2,5,8C.5,8,2 D.8,3,2思维点拨明考向 本题考查队列的基本操作精点拨 数组前面入队,后面出队。TTT操作结果:9,5,8,3,2。Q后队列为:5,8,3,2。再TT之后结果为:3,2,5,8。Q后,队列为:2,5,8答案 B变式1 利用队列实现字符串换位加密,列表k中各元素依次为加密过程中的操作,p表示出队,q表示出队后入队。若队列中元素从队首至队尾依次为“t”“r”“a”“i”“n”,k为[q,p,q,q,p,p,q,p,p],则加密后的出队结果为( )A.“tanri” B.“niart”C.“ritan” D.“rntia”答案 D解析 本题考查队列的基本操作。第1个出队元素为r,2次q操作后,q队列中为n,t,a,i,接着n和t出队。1次q操作后,q队列中为i,a,队列中最后2个元素出队。例2 有如下Python程序段:import randomq=[0]*8head,tail=0,4for i in range(4): k=random.randint(0,10) if k%2==0: q[tail]=k%5 tail+=1 else: head+=1while head print(q[head],end=" ") head+=1程序运行后,输出结果可能为( )A.0 0 0 0 2 3 0 6 B.0 1 2 3 4C.0 0 0 0 D.2 4思维点拨明考向 本题考查队列的算法实现精点拨 队列中初始化4个元素,值均为0。程序一共循环4次,当产生的随机数k为偶数时,将k%5入队,否则出队一个元素。A选项队列中共有8个元素,因此共入队4个元素,但入队的元素值k%5必须小于5。B选项队列中共有5个元素,说明入队比出队多一次,设入队x次,出队y次,有表达式x+y=4和x-y=1成立,两者相加得到x不为整数。C选项说明入队和出队各2次,两面2个0为后面入队的元素。D选项表达式x+y=4和x-y=-2成立,入队1个元素4,出队2个0,但2不可能存在于原队列中答案 C变式2 有如下Python程序:a=[4,2,5,1,9]que=[0]*(2*len(a))head,tail=0,0for i in range(0,len(a)): if head==tail or a[i] que[tail]=a[i] tail+=1 elif a[i]>que[tail-1]: que[tail]=a[i] tail+=1;head+=1print(que[head:tail])执行以上程序段后,输出结果是( )A.4,7 B.5,1,9C.2,5,1,9 D.4,7,2,5,1,9答案 B解析 本题考查队列的算法实现。遍历列表a中元素,若队列为空或遍历的元素值a[i]小于队首que[head],直接将a[i]入队。若遍历的元素值比队尾元素大,则将队首出队后再将a[i]入队。队列中元素变化情况为[4,2]、[2,5]、[2,5,1]、[5,1,9]。1.有一个队列S,其中指针head指向队首元素的位置,指针tail指向队尾元素的下一个位置。关于该队列说法正确的是( )A.队列中元素个数为tail-head+1B.新元素入队时,指针head向右移动C.元素出队时,指针tail向右移动D.当tail==len(S)时,无法再入队新元素答案 D解析 本题考查队列性质和基本操作。tail是指向队尾元素后面的位置,因此队列长度为tail-head。当tail值为len(S),队尾元素存储在len(S)-1,因此队列已满。2.某队列的数据结构如图所示,head和tail分别为队列的头、尾指针。现对该队列进行以下操作:①队首元素出队输出②队首元素出队再入队,重复①②操作直到队列为空。若队列数据元素为“CHINA”,则输出顺序是( )A.CIANH B.CIAHNC.CAHNI D.CHINA答案 A解析 队列的变化情况为CHINA→INAH→AHN→NH→H。3.给一个队列如下约定:T操作是指队列中1个元素出队后再入队,P操作是指1个元素入队。原始队列经过TTPTP系列操作后,队列中队首到队尾的元素依次为ABCDE,则原始队列中队首到队尾的元素依次为( )A.ABC B.ABDC.BAE D.BADEC答案 B解析 A选项经过TTPTP系列操作,第3个元素必须是新入队的,而元素C已经存在于队列中。B选项元素AB出队后入队,C入队,队列为DABC,D出队后再入队,队列为ABCD,最后E入队。C选项第3个元素E已经在队列中。D选项原始队列有5个元素,再入队2个,将有7个元素。4.有1个队列,队首到队尾的元素依次为8,10,12,9。若队首元素是偶数则先出队,再将偶数整除2后重新入队,若队首元素是奇数,直接出队。入队或出队各算一次操作,经过6次操作后,队列中队首到队尾的元素依次为( )A.2,3 B.6,2,3C.9,4,5 D.9,4,5,6答案 D解析 本题考查队列性质和操作。根据队列的特点“先进先出,后进后出”,8出队后4入队(2次),10出队后5入队(2次),12出队后6入队(2次)。共6次,其结果为9,4,5,6。5.有2个队列a和b,队首到队尾的元素依次分别为“5,7,9”和“6,4,8”。约定:T操作是指队列a中1个元素先出队,若大于队列b的队首元素则再入b队列,否则不入;Q操作是指队列b中1个元素先出队,若大于队列b的队尾元素则再入b队列,否则不入。则经过TTQQQQT系列操作后,队列b中的元素个数为( )A.1 B.2C.3 D.4答案 B解析 5和7出队,由于7大于6,则7入队列b。6,4,8依次出队,8大于7,队列b中有7,8。第4个Q表示7出队后不入队。最后队列a中9出队入,入队列b,队列b有元素8和9。6.元素1,2,3,4依次按先后顺序准备入队。约定:P操作是指1个入队,T操作是指队列中1个元素出队后再入队,Q操作是指队列中1个元素出队。则经过PPTQTPQ系列操作后,队列中队首到队尾的元素依次为( )A.1 B.1,3C.3,4 D.3答案 D解析 元素1,2入队,1出队后入队,队列为2,1。2出队,1出队后入队,3入队,1出队,因此队列中只有元素3。7.队列Q从队首到队尾的元素依次为5、2、7、3、6,栈S初始为空。约定:若栈为空或者队首元素小于栈顶元素,那么队首元素出队并入栈;否则,将栈内所有小于队首元素的元素依次出栈并入队,然后将队首元素出队并入栈。反复执行上述操作,直到队列为空。最终,栈S中从栈顶到栈底的元素依次为( )A.2、3、5、6、7 B.7、6、5、3、2C.7、6、5、2、3 D.5、2、7、3、6答案 A解析 程序的功能是实现从栈底到栈顶的降序排列。8.队列Q中的元素依次为1,2,3,4,栈S为空。约定:P操作是队首元素出队后入栈,B操作是队首元素出队后入队,T操作是指栈顶元素出栈后入队。执行操作PPBT后,队列Q中的元素依次为( )A.4,3,2 B.4,2,3C.4,3,1 D.4,2,1答案 A解析 元素1,2出队后入栈,栈顶元素为2。B操作是队首元素出队后入队,队列中为4,3,因此最后队列中为4,3,2。9.执行如下程序段后,变量length的值为( )s="engineer";q=[""]*len(s)head,tail=0,0length=0for x in s: while x in q[head:tail]: head+=1 q[tail]=x;tail+=1 if tail-head>length: length=tail-headA.2 B.3C.4 D.5答案 C解析 程序功能实现查找最长不重复的子串,该子串为'engi '。10.某Python程序如下:q=[""]*50;head=tail=0s="ningbo"for i in s: q[tail]=i;tail+=1while head print(q[head],end="") head+=1 for i in range(3): q[tail]=q[head] head+=1;tail+=1执行该程序段后,输出结果为( )A.nbgoni B.nbogniC.goninb D.ningbo答案 A解析 操作过程:队首出队,紧接着3个入队尾后出队,直至队列为空。ningbo→boing→goin→oin→ni→i。11.某Python程序段如下:s="h#Ap#py"que=[""]*10;res=""head,tail=0,0for i in range(len(s)): if 'a'<=s[i]<='z': que[tail]=s[i] tail+=1 elif head head+=1print(que[head:tail])执行该程序段,输出的结果是( )A.['h','p','p','y']B.['p','p','y']C.['p','y']D.['y']答案 C解析 如果是小写字母直接入队,否则当队列不空时,就让队中元素出队。元素h先入队,元素#让h出队,队空,遍历到A时,无任何操作。元素p入队后,元素#让其出队,接着元素p和y入队。12.有如下程序段:head=0;tail=5que=['a','b','c','d','e']while head+1 if head%4!=0: que.append(que[head]) tail+=1 head+=1print(que[head])执行如下程序段后,最后输出的内容为( )A.a B.bC.c D.d答案 C解析 当head不是0或不是4的倍数时,队首元素出队后再入队,否则就直接出队,直到队列中只剩下一个元素。元素a和e先出队。元素bcd出队后再入队,head值为8,接着元素b出队。head为9,元素cd出队后入队,head为11,元素c出队入队,head为12,元素d出队,最后剩下元素c。13.有如下Python程序段:s="abcdddbha"que=[""]*10;head=tail=0for i in range(len(s)): if s[i] not in que[head:tail]: que[tail]=s[i] tail+=1 else: head+=1print(que[head:tail])程序运行后,输出的结果是( )A.['a','b','c','d','h']B.['a','b','c','d','d']C.['c','d','b','h','a']D.['a','d','d','d','a']答案 C解析 本题考查队列基本操作。遍历列表s,当元素不在队列中,将该元素入队,否则将队首元素出队(该元素不入队)。遍历第2个第3个d时,ab出队,队列中有[c,d],接着bha依次入队。14.列表q长度为20,q[0]到q[7]的值依次为'a','b','c','a','c','d','d','e',执行如下程序段后,输出的结果为( )head=tail=0for i in range(8): if q[i]==q[head] and head!=tail: tail+=1 head=tail else: tail+=1print(q[head:tail])A.cdde B.acddeC.eddc D.e答案 A解析 分析程序段可知,该程序段实现的是一种消消乐游戏,即若新遍历到的元素和队首的元素不同或者队列为空,则将新元素入队。若新遍历到的元素和队首的元素相同,则将所有队列中的元素清空。因此队列中最后剩余的元素为c,d,d,e。15.有如Python程序段:a=[3,1,-6,0,-1,5,2,-5,1,3]n=len(a);q=[0]*nhead,tail=0,0for i in range(0,n): if head if q[head]+a[i]>0: q[tail]=q[tail-1]+a[i] tail+=1 else: head=tail else: if a[i]>0: q[tail]=a[i] tail+=1print(tail-head)执行以上程序段后,输出的结果为( )A.2 B.3C.5 D.6答案 A解析 若队列为空且a[i]大于0,将a[i]入队。若队列不空,当头首与a[i]大于0,将q[tail-1]+a[i]的值入队,当头首与a[i]小于等于0,清空队列。元素3和元素3+1入队,由于3和-6的值小于0,清空队列,0和-1不入队。元素5和元素5+2入队,由于5和-5的值等于0,清空队列。元素1和元素1+3入队,队列中有两个元素。16.有如下Python程序段:import randomque=["a","b","c","d","","","","","",""]head=0;tail=4;ans=""for i in range(5): if random.randint(0,1)==0: ans+=que[head] que[tail]=que[head] head+=1 tail+=1 else: head+=1执行该程序段后,ans的值不可能是( )A."bcc" B."aa"C."bcdb" D."abcd"答案 A解析 循环次数为5次,每次循环在将队首移至队尾与直接出队之间选择其一,在队首移至队尾前将队首存储在ans中。A选项a直接出队,b出队后入队,队列为cdb,c出队后入队,队列为dbc,d和b出队,c再次出队后入队,共需6次循环。B选项a出队后入队,bcd依次出队,a出队后入队。C选项a出队,bcd出队再入队,b再次出队再入队。D选项abcd出队再入队,a出队。17.有如下Python程序段:import randomque=[0]*10head=0;tail=5 #定义队列的首尾指针for i in range(5): k=random.randint(0,10) if k%2==0: head+=1 else: que[tail]=i%3 tail+=1while head print(que[head],end=" ") head+=1运行如下程序段后,输出结果不可能是( )A.0 0 0 2 B.0 0 1 2C.0 1 0 2 D.0 0答案 C解析 i%3的值依次为0,1,2,0,1,队列的特性是先进先出,前5个零以后面入队的数字之前出队。5次操作后,前三项队列中有4个元素,说明出队比入队多1次。A选项0和2入队。B选项1和2入队。C选项1和2入队,但原始队列中没有1。D选项队列中剩余2个元素,出队加入队次数为5,出队比入队多3次,因此出队4次,入队1次,最后一个0入队。1.某队列中的元素依次为"R","o","u","t","e","r",将反复对队内元素做如下操作,直到队列元素为空:①队首元素出队并在队尾入队;②队首元素出队并输出。则输出顺序为( )A.Rueort B.ReorutC.otruRe D.otrueR答案 C解析 队列具有先进先出的特性,出队后入队的元素还是保持在原队列的顺序。每间隔一个元素出队,otr先出队,队列中有元素Rue,接着是uRe的顺序。2.有1个队列,队首到队尾的元素依次为1,2,3,4,5。约定:T操作是指队列中1个元素出队后再入队,Q操作是指队列中1个元素出队。则经过TTQTTQTTQ系列操作后,队列中队首到队尾的元素依次为( )A.4,5 B.5,4C.2,4 D.4,2答案 C解析 队列的变化情况为12345→34512→4512→1245→245→524→24。3.约定:T操作是指在队列中1个元素出队后再入队,E操作是指将1个元素入队,P操作是指队列中1个元素出队,队首指针head和队尾指针tail初始值均为0。则经过EETPETEP系列操作后,队首指针head和队尾指针tail的值分别为( )A.3 4 B.3 5C.4 5 D.4 6答案 D解析 本题考查队列的基本操作。T操作既有入队,又有出队,因此共有6次入队,4次出队,每次出队和入队,指针分别加1。4.有1个队列,队首到队尾的元素依次为1,2,3,4,5,6,7。现进行如下操作:①出队2个元素;②再出队1个元素并将该元素入队。重复以上操作,直至队列中仅剩1个元素。则该元素是( )A.3 B.5C.6 D.7答案 C解析 元素1,2和4,5出队,3和6出队后入队,队中有7,3,6,元素7,3后,队中只有元素6。5.队列S有若干元素。约定:U操作是指出队,H操作是指元素出队后再入队。经过UHUHHU操作后,队列中队首到队尾的元素依次为4,1,3,则队列S初始状态中队首到队尾的元素可能为( )A.1,1,4,4,3,3 B.4,4,1,1,3,3C.1,4,3,1,4,3 D.3,1,4,3,1,4答案 B解析 A选项经过该操作后的结果为1,4,3。C选项经过该操作后的结果为4,1,4。D选项经过该操作后的结果为1,3,1。6.有“甲乙丙丁戊”5位游客已按序排队,定义下列操作:顺利买票进入景区,记为Q1;缺少证件需要重新排队,记为Q2;新游客进来排队,记为Q3。若游客“丁”买票时,发现游客“乙”在“丁”的后两位(乙和丁之间还有一位游客),则已进行的操作过程可能是( )A.Q3,Q1,Q2,Q1 B.Q1,Q2,Q2,Q3C.Q1,Q2,Q3,Q3 D.Q2,Q2,Q1,Q3答案 B解析 甲先出队,乙和丙出队后入队,丁出队买票,乙和丁之间有游客戊。7.现有一队列"ECBAD"可以进行如下两种操作:①队首出队后入队②队首出队进入结果区。要求结果区为"ABCDE",则元素"D"被执行①操作的次数至少为( )A.1 B.2C.3 D.4答案 B解析 元素"ECB"出队后入队,元素A出队,元素D出队并入队1次。元素E和C出队并和队,B出队,元素D出队并入队第2次,队列中为ECD。元素E出队后入队,各个元素再依次出队。8.有两个队列Q1与Q2,初始都为空,经过一系列入队、出队操作(数据全部入队后,才能进行出队操作),若元素入队的顺序是a,b,c,d,e,则不可能的出队序列是( )A.acbde B.ebcdaC.abcde D.daebc答案 B解析 A选项abde入Q1队列,c入Q2队列。B选项由于e最后入队,若要第1个出队,则e必须占用一个队列,剩余的数据不符合先进先出的规则。C选项只用一个队列就可以实现。D选项元素d和e入Q1队列,a,b,c入Q2队列。9.数据S1至S4的优先级依次为3,4,1,2,某设备按优先级1至4依次发送数据,利用队列S组织数据并模拟发送过程,初始队首至队尾数据依次为:S1、S4、S3、S2。可利用操作M(出队后再入队)调整数据发送顺序,为将数据发送完毕,则M的执行次数至少为( )A.4 B.5C.6 D.7答案 B解析 队列中各数据的优化级为3,2,1,4,S1和S4先进行M操作各一次,S3出队,S2和S1进行M操作各一次,S4出队,S2进行M操作一次,S1、S2出队。10.有如下Python程序:a=[13,12,12,15,26,23,36]que=[0]*len(a)head=tail=0for x in a: while head if x tail-=1 else: break que[tail]=x tail+=1print(que[head:tail])执行后,程序输出结果为( )A.12 15 26 36 B.12 15 23 26C.12 12 15 23 36 D.12 13 15 23 36答案 C解析 遍历数组a,若队列不空,且x比队尾元素小,队尾元素不断地出队,再让x入队。整个过程描述为13入队后出队,12,12,15,26依次入队,26出队,23,36入队。11.某Python程序段如下:s="21027,53523,042,";ans=""q=[0]*100;head=tail=0for i in range(len(s)): if "0"<=s[i]<="9": q[tail]=s[i];tail+=1 elif s[i]==",": flag=True while head ans+=q[head];head+=1 if head!=tail and flag: head+=1 flag=not flag执行该程序段后,变量ans的值为( )A."20735204" B."20255202"C."20755302" D."20235304"答案 B解析 程序的功能遇到数字字符进行入队操作,遇到逗号进行出队操作,tmp 将出队的数字字符进行拼接,当flag为True时,跳过flag为True时第2个出队的数字字符,所以拼接的依次是"2"→"0"→"2"→"5"→"5"→"2"→"0"→"2"。12.有如下Python程序段:s="ABCDEF";que=[""]*10head=0;tail=0for i in range(len(s)): if i % 2==0: que[tail]=s[len(s)-1-i] else: que[tail]=s[i-1] tail=tail+1while head print(que[head],end="") head+=1该程序运行后输出的结果为( )A.FAEBDC B.FADCBEC.FBDDBF D.FDBACE答案 B解析 奇数位把字符s中索引i的对称位置中字符入队,偶数位把字符s中前一位置中字符入队。13.有如下Python程序段:s=input()d=[-1]*10;head=tail=0for i in range(len(s)): if d[int(s[i])] if tail-head==3: head+=1 d[int(s[i])]=tail tail+=1若执行程序后,d的值为[-1,4,6,5,3,-1,-1,-1,-1,-1],则输入的s值可能是( )A."6954132" B."11114132"C."1324132" D."41341322"答案 C解析 遍历字符串s,当前元素未出现过或比队首元素下标小,若队列元素个数等于3,出队一个元素,当前元素下标入队。14.有如下程序段:m=3;n=7head=tail=0;ans=0vis=[0]*10;q=[0]*10for i in range(n): x=int(input()) if vis[x]==0: ans+=1 if tail-head>=m: vis[q[head]]=0 head+=1 q[tail]=x;tail+=1 vis[x]=1print(ans)运行该程序段,依次输入x的值:1,2,1,5,4,4,1。则程序运行完成后ans的值是( )A.3 B.4C.5 D.6答案 C解析 本题考查队列的算法实现。vis是一个标志数组,当其元素值为0时,可以入队,保证队列中数据是唯一的。当队列中元素个数大于等于3时,将进行出队操作。ans统计入队次数。输入x的值1,2入队,接着1不能入队,5入队,当输入4时,让1出队,4入队。第2个4不能入队,最后一个1入队。15.有如下Python程序段:from random import randintn=5;q=[0]*nhead=tail=randint(0,n-1)while head!=tail+1: num=randint(1,n) if q[head]!=num: q[tail]=num tail+=1 if tail==n:tail=0 else: q[head]=0;head+=1 if head==n:head=0执行该程序段后,列表q可能为( )A.[1,2,3,4,5] B.[3,0,1,4,1]C.[5,0,1,2,3] D.[1,0,0,4,3]答案 C解析 初始队列q为空,随机选择一个位置作为head和tail,将产生的数存入队尾,队尾向后移动,若队尾到达n,则tail的为0,此时队尾在队首的前面,继续产生新的数入队。当队尾指针和队首指针相差1时,结束循环,因此队列中必须只包含一个0,排除选项A和D。随机生成1到n之间的值num,当队首和num值不相同时,将num存入队列,否则将队首设置为0,执行一次出队操作,队列中的数据不允许出现与当前队首元素重复值,若出现重复,则会将队首元素进行出队。tail指向0的位置,head在其后,队列中不可能存在与队首相同的元素。16.有如下Python程序段:from random import randintq=[1,2,14,5,6,7,9,10]head=0;tail=len(q)-1;ans=0m=randint(1,3)q+=[0]*mfor i in range(m): for j in range(2**i-1): head+=1 ans+=q[head] q[tail]=q[head] head+=1;tail+=1执行该程序段后,变量ans的值不可能是( )A.1 B.15C.24 D.34答案 D解析 变量m为1,2,3的随机数,若m为1,i只能取到0,2**0-1结果是0,没有进入内循环。ans累加q[0],值为1。若m为2,q列表末尾插入2个0,当i为0时,没有出队,ans为1,队首出队重新入队。当i为1时,内循环执行一次,2出队,指针head值为2。ans累加q[2],结果是15。若m为3,外循环执行2次后,ans的值为3,head值为2,第3次执行外循环时,内循环执行3次,head的值为6,ans累加9,值为24。17.执行下列Python程序段,输出结果为( )data=[1,2,3,1,2,3]que=[0]*10;head=tail=0for i in range(len(data)): if data[i] % 2!=0: que[tail]=data[i] tail+=1 elif tail-head>1: que[tail-1]+=que[head] head+=1print(que[head: tail])A.[3,2,1] B.[1,2,3]C.[1,3,1] D.[3,2,3]答案 D解析 遍历data数组,如果data[i]是奇数,入队。data[i]是偶数且队列中至少有2个元素时,队首元素出队且累加到que[tail-1]元素。遍历到1时,1入队;遍历到2时,队列只有1个元素。遍历到3时,3入队;遍历到1时,1入队;遍历到1时,1出队且累加到队尾,队列为[3,2];遍历到3时,3入队。18.有如下Python程序段:que=["A","B","C","D","E"]+[""]*10n=5;head=0;tail=5for i in range(n): print(que[head],end="") head+=1 for j in range(i): que[tail]=que[head] tail+=1 head+=1执行该程序段后,显示的结果是( )A.ACBED B.ABDCEC.ABDEC D.ACBDE答案 C解析 本题考查队列的基本操作。外循环5次,每次先出队一个元素,内循环分别循环0,1,2,3,4次,每次循环将队列元素出队并入队到最后。当i为0时,A出队,不循环移动。i为1时,B出队,C后移,队列中为DEC。i为2时,D出队,EC后移,队列中为EC。i为3时,E出队,C后移3次,队列中为C。最后C出队。19.执行如下程序段后,输出的结果是( )q=[6,8,9,7,4,5,2,3]pre=10head,tail=0,len(q)while head!=tail: if pre>q[head]: pre=q[head] print(q[head],end=' ') head+=1A.6 8 9 B.6 4 2C.6 5 3 D.6答案 B解析 本题考查队列的基本操作。程序的功能是查找队列中最小值,pre初值为10,每次出队一个元素,出队元素也pre比较,记录其最小值的过程。20.有如下Python程序段:import randomq=[0]*5head=tail=0for i in range(5): if random.randint(0,1)==0: q[tail]=random.randint(1,9) tail+=1 elif head!=tail and q[tail-1] q[tail]=q[head] head+=1 tail+=1执行该程序段后,q的值不可能是( )A.[0,0,0,0,0] B.[5,4,3,2,1]C.[5,8,3,0,0] D.[0,5,6,0,0]答案 D解析 本题队列的基本操作。入队的条件是产生的随机数为0,出队的条件是队不空且队尾元素比较队首元素小。A选项产生随机数均为1,没有任何元素入队。B选项依次入队过程中,队尾元素大于队尾元素值。C选项队列中只有3个元素,先产生8,5,再进行出队和入队,最后再产生3,循环了4次,还有一次产生的随机数为1,不做任何操作。D选项只要有元素入队,第一个元素不可能为0。21.有如下Python程序段:q=[i for i in range(7)]head,tail=1,0;cnt=0while (head+1)%7!=tail: cnt+=1 if cnt==3: cnt=0 else: q[tail]=q[head] tail=(tail+1)%7 head=(head+1)%7print(q[head])运行该程序段后,输出结果是( )A.5 B.4C.2 D.1答案 D解析 head=1,tail=0表示此队列中的元素为1到6,在此循环队列中数到第3个时出队,直到队列中只剩一个元素,出队的元素依次为3、6、4、2、5,最后队列中剩下的元素为1。 展开更多...... 收起↑ 资源列表 4.2 队 列.docx 4.2 队 列无答案.docx