资源简介 第三章 字符串、队列和栈 章节测试一、选择题1.元素1,2,3,4,5,6依次入栈,若第1个出栈的元素是4,则不可能是第3个出栈的元素是( )A.1 B.2 C.3 D.52.下列关于队列和栈的说法,不正确的是( )A.队列是一种先进先出的线性表,可在队尾进行插入操作B.栈的特性是″先进后出,后进先出″C.某栈的入栈的顺序为″abc″,出栈顺序只有3种D.队列和栈都是线性数据结构,都可以用数组来实现3.有一空栈S,对待进栈的数据元素序列a,b,c,d,e,f依次进栈、进栈、出栈、进栈、进栈、出栈的操作,操作完成后,栈S的栈顶元素是( )A.c B.d C.e D.f4.在某餐厅点餐系统中, 利用队列来储存当前正在排队顾客的编号,head 指向队首元素,tail 指向队尾元素的下一个位置, 若 tail=head+3,则现在排队的顾客数量为( )A.2 B.3 C.4 D.55.有1个队列,队首到队尾的元素依次为8,3,2,9,5。约定:T操作是指队列中1个元素出队后再入队,Q操作是指队列中l个元素出队。则经过TTTQTTQ系列操作后,队列中队首到队尾的元素依次为( )A.2,9,5 B.2,5,8 C.5,8,2 D.8,3,26.设栈S和队列Q的初始状态为空,元素w1、w2、w3、w4、w5依次通过栈S,一个元素出栈后即进入队列Q,下列不可能是出队序列的是( )A.w5、w4、w3、w2、w1 B.w3、w2、w1、w4、w5C.w4、w2、w1、w3、w5 D.w1、w2、w3、w4、w57.有1个队列,队首到队尾的元素依次为1,2,3,4,5。约定:T操作是指队列中1个元素出队后再入队,Q操作是指队列中1个元素出队。则经过TTQTTQTTQ系列操作后,队列中队首到队尾的元素依次为:( )A.4,5 B.5,4 C.2,4 D.4,28.有如下 Python 程序段:s = input('请输入一串小写字母')head = 0; tail = 0; top = -1s1 = [""]*((len(s)+1)//2)s2 = [""]*(len(s)//2)for i in range(len(s)):if i % 2 == 0:s1[tail] = s[i]tail += 1else:top += 1s2[top] = s[i]x = ""while head < tail and top > -1:x = s1[head] + xhead += 1x = x + s2[top]top -= 1print(x)执行该程序段,输入字符串“abcdefg”,则输出的结果是( )A.acegbdf B.acegfdb C.gecafdb D.ecafdb9.有如下程序段:bt=["A","B","C","D",None,"E","F"]result=[]stack=[]i=0while stack or (i if i < len(bt) and bt[i] is not None: stack.append(i) i=2*i+1 else: i=stack.pop() result.append(bt[i]) i=2*i+2print("-".join(result))则程序运行后输出的结果为( )A.A-B-D-C-E-F B.D-B-E-F-C-A C.D-B-A-E-C-F D.A-B-C-D-E-F10.用栈的数据结构编写进制转换中的“除二取余法”的程序段如下:st=[-1]*100top=-1n=int(input("请输入一个十进制数: "))while n>0:while top!=-1:print(st[top],end="")top-=1方框处的代码由以下四部分组成:①n=n//2 ②top+=1 ③x=n%2 ④st[top]=x下列选项中,代码顺序正确的是( )A.③④②① B.③①②④ C.①②③④ D.①③④②11.一个序列的入栈顺序为9,8,7,6,5,4。若7第一个出栈,则下列出栈序列中不可能的是( )A.7,8,9,6,5,4 B.7,8,9,5,6,4C.7,9,8,4,5,6 D.7,8,9,6,4,512.有如下Python程序段:w=[12,5,8,9,3,16]n=len(w);stack=[0]*ntop=-1;k=0;t=25while top!=-l or kwhile t>0 and kif t>=w[k]:top+=l;stack[top]=kt-=w[k]k+=lif t==0:print(stack[:top+1])k=stack[top];top-=lt+=w[k]:k+=l执行该程序段后,输出第一组列表是( )A.[0,1,2] B.[1,2,3,4] C.[3,5] D.[12,5,8]13.某Python程序如下:from random import randinta=[1,8,3,6,7,2,9,0,5,1,3]s=[-1]*100;top=-1i=0x=randint(5,8)while i while top!=-1 and a[i] < s[top]: top-=1 top+=1;s[top]=a[i] i+=1while top!=-1: print(s[top],end="") top-=1执行该程序段后,输出的结果不可能是( )A.0 B.21 C.631 D.92114.在日常幻灯片的放映中,可以通过超级链接方式进行幻灯片之间的任意跳转。和这种跳转方式相似的数据结构是( )A.数 B.链表 C.队列 D.栈15.一个栈的初始状态为空,若它的输入序列为a、b、c、d,则它的输出序列为( )A.a、b、c、d B.d、c、b、aC.b、a、c、d D.d、b、a、c二、填空题16.有一维数组1、2、3、4、5,依次按照某一线性存储,请回答以下问题:(1)如果该线性结构是队列,写出出队序列。(2)如果该线性结构是栈,输出序列可能是4、3、5、1、2吗?为什么?(3)在一维数组A中有5个元素:8、12、20、25、33,采用二分查找25,请写出每次查找的过程?三、操作题17.暑假期间,小明担任了天文馆售票处的志愿者工作,工作内容是维持游客的买票秩序,在开始售票前后的一段时间内(7:50-8:00),他观察到排队买票的队列发生了以下变化。(买票中不算排队)时间 状态7:50 售票窗口前没有人排队7:55 售票窗口前有5个人(用P1,P2,P3,P4,P5表示)依次在排队8:00 开始售票,有3个人(P1,P2,P3)陆续买票离开,又来了4个人(P6,P7,P8,P9)依次排入队中根据上述观察,思考并回答下面的问题。(1)最先进入队列的是 ,P3买完票离开后,排在队首的人是 ,队列里有 个人在排队。(2)为了便于游客参观,天文馆配置了伴游机器人,此机器人不仅可以当小导游陪伴游览,还可以利用其自带的搜索功能轻松查找馆内餐厅、洗手间及各个展馆位置,搜索功能主要依赖于 。A.DNS B.GPS C.CSS D.iOS(3)经过暑假志愿服务的经验,小明想为天文馆设计一款网上自助售票系统,请你帮助小明完成预约流程图。(填字母)① ;② ;③ ;④ 。A.是B.选择预约日期C.选择预约时间段D.否18.为鼓励绿色出行,某市推出了优惠方案:乘一次地铁后可以获得一张优惠券,在有效期45分钟内(含)可免费搭乘一次公交车。有效期指乘公交车与乘地铁的开始时刻之差。搭乘公交车时,可以使用优惠券则一定会使用,如果有多张优惠券满足条件,则优先消费获得最早的优惠券。有人用Python编写程序计算出行的费用。他的某次出行过程如图a所示,程序运行结果如图b所示。 请回答下列问题:(1)请在划线处填入合适的代码。def Ctime(t):# 自定义函数Ctime功能为将时间转为分钟计存入变量s,代码略。return s'''读取出行记录,存储在列表a中,a[i][0]、a[i][1]、a[i][2]依次存储交通工具类型、票价、乘坐开始时刻。交通工具类型a[i][0]值为0表示地铁,1表示公交车。代码略。'''n = len(a)for i in range(n):a[i][2] = Ctime(a[i][2])for i in range(n - 1):for j in range(n - 1, i, -1):a[j], a[j - 1]= a[j - 1], a[j]# 输出出行记录,代码略。total = 0head = tail = 0q = [-1] * nfor i in range(n):if a[i][0] == 0:total += a[i][1]tail += 1else:while head < tail and q[head] < a[i][2] - 45:head += 1if :total += a[i][1]else:print(a[i][2],"时刻使用了优惠券")print("总共花费为:", total)(2)程序中加框处代码有错,请改正。(3)该程序主要应用的数据结构类型是 (选填:队列 / 栈 / 链表 / 二叉树)。19.小明对入栈、出栈规则研究发现, 若有 n 个数字 1,2,3,……,n 按由小到大的顺 序入栈,则出栈序列必须遵循下述原则: 当数字 x 出栈后,则在x后出栈的小于x 的 所有数字必定以降序排列,比x大的数字可以夹杂在该降序序列中。现编写 Python 程 序,按上述原则验证一个随机产生的出栈序列是否可能, 程序运行界面如图所示。(1) 根据题意,若有 7 个数字入栈, 则出栈序列“3→2→5→4→7→1→6”是 (单选,填字母: A.可能 / B.不可能)(2) 实现上述功能的Python程序代码如下,程序中加框处代码有错,请改正 。(3)请在划线①②处填入合适代码 、 。import randomn=int(input('请输入入栈元素的个数:'))data=[i+1 for i in range(n)]random.shuffle(data) #将序列的所有元素随机排序s=” ”for i in range(n):print('随机产生的出栈序列为: '+s[1:])flag=True;i=0while i①for j in range(i+1,n):if data[j]if data[j]x=data[j]else:②#去除最后多余的'→'breaki+=1if flag:print('该出栈序列是可能的!')else:print('该出栈序列是不可能的! ')参考答案:1.A2.C3.A4.B5.B6.C7.C8.D9.C10.B11.C12.A13.C14.B15.B16.1、2、3、4、5不可能,因为:4是第一出栈字符,说明1,2已别压入栈内;并且压入栈的次序为12345;由以上得出:12出栈的顺序只能是2、1,而不是1、2。所以,出栈序列4,3,5,1,2是不可能的 第一次查找,找到的元素为20,此时20小于目标数,所以在列表的后半部分查找,第二次查找到的元素为25,此时找到,所以共需要两次找到17.P1 P4 5 B B C A D18.q[tail]=a[i][2] head==tail 或 q[head]==-1 head+=1 a[j][2] < a[j - 1][2] 队列19.B s+=’ →’+str(data[i]) x=data[i] flag=False 展开更多...... 收起↑ 资源预览