内容正文:
第08讲 字符串、队列和栈
目录
01 课标达标练
题型01 字符串、栈与队列对点选择
题型02 代码挖空填空
02 核心突破练
03 真题溯源练
01 字符串、栈与队列对点选择
考向 1:字符串基础
1. 在 Python 中,字符串s="ZheJiang2026",下列表达式执行结果为"Jiang"的是()
A. s[4:8] B. s[5:9] C. s[-8:-4] D. s[4:-5]
2.有 Python 程序段:
s = "HangZhou"
res=""
for ch in s:
if ch >= "n":
res = res + ch.upper()
else:
res += ch.lower()
执行结束后 res 的值为()
A. hanGzHOU B. hangzhou C. hanGZHOU D. HANGZHOU
考向 2:栈、队列概念辨析
3.下列关于栈与队列说法正确的是()
A. 队列是后进先出,栈是先进先出
B. 递归函数调用时,系统使用队列保存函数现场
C. 栈只能在一端进行插入和删除操作
D. 队列删除元素在队尾,插入元素在队首
4. 现有队列 Q,队首到队尾元素:["a","b","c","d"];约定:T:队首元素出队;R:队首元素出队后重新加入队尾。执行操作序列T R T R T,最终队列队首元素是()
A. c B. d C. b D. a
考向 3:栈队列进出模拟
5. 已知入栈序列:1,2,3,4,下列不可能是合法出栈序列的是()
A. 2,1,4,3 B. 1,4,2,3 C. 3,2,4,1 D. 2,3,1,4
6. 栈初始为空,依次执行:push (2),push (5),pop (),push (7),pop (),push (9),pop (),此时栈内元素为()
A. [2] B. [5,7] C. [2,9] D. [7,9]
02 代码挖空填空
7. 统计字符串大写英文字母的个数。请补全划线①。
s = input("请输入字符串:")
cnt = 0
for ch in s:
if ① :
cnt += 1
print("大写字母数量:",cnt)
①处合适的代码:________
8. 利用栈检查括号是否匹配。输入只包含(和),匹配输出 True,不匹配 False。补全划线①②。
st = []
s = input()
flag = True
for ch in s:
if ch == '(':
st.append(ch)
else:
if len(st)==0:
flag = False
else:
① #出栈
if ② :
flag = False
print(flag)
①________;②________
9. 【新情境・快递单号字符串处理|选择题,改编自宁波十校高三联考】
新考法:字符串切片 + 逆向遍历结合
快递单号规则:单号总长度 10 位;第 3‑6 位代表网点编码;最后两位代表校验码。
s = "KD24083791",下列能提取网点编码的代码是()
A. s[2:6] B. s[3:7] C. s[-8:-4] D. s[2:-2]
10.【新情境・图书馆还书队列|选择题,改编新阵地联盟 2026 届联考】
新考法:队列与条件出队结合,不是单纯固定 T/R 操作
图书馆还书队列,队首到队尾[B01,B02,B03,B04]。规则:遇到编号末尾为偶数的书直接出队登记;奇数则出队,放到队尾。循环直到队列为空。出队登记顺序是()
A. B02 B04 B01 B03 B. B01 B02 B03 B04
C. B02 B01 B04 B03 D. B04 B02 B03 B01
11.【新设问:字符串变形统计|程序填空】
新考法:遍历字符串,相邻字符比较,统计连续相同字符段的数量。例如输入"aabbbcc",段为aa、bbb、cc,输出段数 = 3。
s = input()
if len(s)==0:
print(0)
else:
cnt = 1
for i in range( ① ):
if ② :
cnt += 1
print(cnt)
①________;②________
12.【新考法:栈模拟运算|程序填空,改编诸暨高三诊断卷】
实现简易后缀表达式计算,数字入栈;遇到运算符弹出两个数运算,结果压回栈。如后缀"3 4 +"等价3+4=7。
exp = input().split()
st=[]
for token in exp:
if token in "+-*/":
b = st.pop()
a = st.pop()
if token=="+":
res = a + b
elif token=="-":
res = a b
elif token=="*":
res = a * b
else:
res = a / b
①
else:
②
print(st[0])
①________;②________
1.【2024 年 1 月浙江选考信息技术 第 8 题|选择题,2 分】21世纪教...
栈 S 从栈底到栈顶的元素依次为 1,2,3,队列 Q 初始为空。约定:U 操作是指元素出栈后入队,H 操作是指元素出队后再入队。经过UUHU系列操作后,队列中队首到队尾的元素依次为()
A.2,1,3 B.3,1,2 C.1,3,2 D.2,3,1
2.【2026 年 6 月浙江选考信息技术 第 8 题|选择题,2 分】
栈初始为空,经过一系列入栈、出栈操作后,栈又为空。若元素入栈的顺序为 1,2,3,4,5,6,7,且每个元素入栈 1 次,最后出栈的两个元素为 5 和 2,则对于所有可行的方案,操作过程中栈内元素个数最多为()
A.3 B.4 C.5 D.6
3.【2024 年 1 月浙江选考信息技术 第 11 题|选择题,2 分(字符串双指针随机取字符)】21世纪教...
若字符串s的值为"abcde",执行如下程序段后,变量res的值不可能是()
from random import randint
res = ""
i, j = 0, len(s)-1
while i < len(s) and j >= i:
if randint(0,1) == 0: #randint(0,1)随机生成0或1
res += s[i]
i += 1
else:
res += s[j]
j -= 1
A."abced" B."aecbd" C."aedbc" D."edcba"
4.【2026 年 1 月浙江选考信息技术 第 10 题|选择题,2 分(字符串循环处理)】学科网
有如下 Python 程序段:
c,i="",0
while i<len(s) and t>=0:
if s[i]=="e":
t -= 1
else:
c += s[i]
i += 1
若s为"keeper",t为2,执行该程序段后,c的值为()
A."k" B."kp" C."kpr" D."kper"
5.【2026 年 6 月浙江选考信息技术 第 14 题|非选择题,10 分,队列 + 缓冲区,完整原题】
在葡萄园监控系统中,为防止网络传输不稳定导致的数据丢失,智能终端采用了缓冲机制:智能终端每隔 60 分钟获取一次传感器数据存入缓冲区,然后将缓冲区中的数据按获取顺序一一上传,上传成功的数据从缓冲区中删除;若上传失败,则随机延时 1 至 10 分钟后重试,但重试过程不得影响数据获取的时间间隔。
请回答下列问题:
(1) 若智能终端在某天 8:00,9:00,10:00,11:00 获取的传感器数据依次为 D1,D2,D3,D4,8:30~11:30 网络断开,其他时段数据传输正常,则智能终端在 11:00 以后上传成功的第 2 个数据是________。(2 分)
(2) 实现上述功能的部分 Python 程序如下,请在划线处填入合适的代码。
#导入相关库,代码略
from random import randint
from time import sleep
def trans(data):
#将data上传至服务器,上传成功返回1,否则返回0,代码略
pass
buf = []
while True:
#获取传感器数据,存入变量data中,代码略
buf.append(data) #将传感器数据存入缓冲区
stime = 60
while stime>0 and ① :
data = buf[0]
state = trans(data)
if ② :
buf.pop(0) #将上传成功的数据从缓冲区中删除
else:
delay = randint(1, 10) #随机生成1到10之间的整数
if delay stime:
delay = stime
sleep(delay * 60 * 1000)
③
sleep(stime * 60 * 1000)
①________;②________;③________(每空 2 分,共 6 分)
参考答案汇总速查
课标达标练 1.A;2.A;3.C;4.B;5.B;6.A;7."A" <= ch <= "Z";8.①st.pop(),②len(st)!=0
核心达标练 9.A;10.A;11.①1, len(s),②s[i] != s[i1];12.①st.append(res),②st.append(int(token))
学科网(北京)股份有限公司1 / 17
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
第08讲 字符串、队列和栈
目录
01 课标达标练
题型01 字符串、栈与队列对点选择
题型02 代码挖空填空
02 核心突破练
03 真题溯源练
01 字符串、栈与队列对点选择
考向 1:字符串基础
1. 在 Python 中,字符串s="ZheJiang2026",下列表达式执行结果为"Jiang"的是()
A. s[4:8] B. s[5:9] C. s[-8:-4] D. s[4:-5]
答案:A
解析:字符串下标从 0 开始。s="Z h e J i a n g 2 0 2 6",索引:0:Z,1:h,2:e,3:J,4:i,5:a,6:n,7:g。s[4:8]取索引 4、5、6、7,得到Jiang。B 取iang;C 取Jiang2;D 取Jiang20。
2.有 Python 程序段:
s = "HangZhou"
res=""
for ch in s:
if ch >= "n":
res = res + ch.upper()
else:
res += ch.lower()
执行结束后 res 的值为()
A. hanGzHOU B. hangzhou C. hanGZHOU D. HANGZHOU
答案:A
解析:遍历每个字符,字符大于等于 'n' 转为大写,小于 'n' 转小写。
H(小于 n)→h;a→a;n→N;g→g;Z>=n→Z;h>=n→H;o>=n→O;u>=n→U,拼接得到hanGzHOU。
考向 2:栈、队列概念辨析
3.下列关于栈与队列说法正确的是()
A. 队列是后进先出,栈是先进先出
B. 递归函数调用时,系统使用队列保存函数现场
C. 栈只能在一端进行插入和删除操作
D. 队列删除元素在队尾,插入元素在队首
答案:C
解析:
A 错:栈后进先出,队列先进先出;
B 错:递归使用栈保存现场,不是队列;
C 对:栈的入栈、出栈都在栈顶(同一端);
D 错:队列:队尾插入,队首删除。
4. 现有队列 Q,队首到队尾元素:["a","b","c","d"];约定:T:队首元素出队;R:队首元素出队后重新加入队尾。执行操作序列T R T R T,最终队列队首元素是()
A. c B. d C. b D. a
答案:B
解析
初始 Q:a b c d
1.T:a 出队;Q:b c d
2.R:b 出队入队尾;Q:c d b
3.T:c 出队;Q:d b
4.R:d 出队入队尾;Q:b d
5.T:b 出队;Q:d
队首:d。
考向 3:栈队列进出模拟
5. 已知入栈序列:1,2,3,4,下列不可能是合法出栈序列的是()
A. 2,1,4,3 B. 1,4,2,3 C. 3,2,4,1 D. 2,3,1,4
答案:B
解析:入栈 1,出栈 1;之后入栈 2、3、4,出栈 4。此时栈内是 2、3,下一个出栈只能是 3,不可能是 2。因此1,4,2,3不可能。
6. 栈初始为空,依次执行:push (2),push (5),pop (),push (7),pop (),push (9),pop (),此时栈内元素为()
A. [2] B. [5,7] C. [2,9] D. [7,9]
答案:A
解析
push (2) →栈:[2]
push (5) →栈:[2,5]
pop () 弹出 5 →栈:[2]
push (7) →栈:[2,7]
pop () 弹出 7 →栈:[2]
push (9) →栈:[2,9]
pop () 弹出 9 →栈:[2]
02 代码挖空填空
7. 统计字符串大写英文字母的个数。请补全划线①。
s = input("请输入字符串:")
cnt = 0
for ch in s:
if ① :
cnt += 1
print("大写字母数量:",cnt)
①处合适的代码:________
答案:"A" <= ch <= "Z"
解析:判断字符是否为大写英文字母,利用字符的 ASCII 码大小比较。
8. 利用栈检查括号是否匹配。输入只包含(和),匹配输出 True,不匹配 False。补全划线①②。
st = []
s = input()
flag = True
for ch in s:
if ch == '(':
st.append(ch)
else:
if len(st)==0:
flag = False
else:
① #出栈
if ② :
flag = False
print(flag)
①________;②________
答案:①st.pop();②len(st)!=0
解析:遇到右括号,如果栈不为空则弹出栈顶左括号;遍历结束,栈不为 0 说明左括号多,括号不匹配。
9. 【新情境・快递单号字符串处理|选择题,改编自宁波十校高三联考】
新考法:字符串切片 + 逆向遍历结合
快递单号规则:单号总长度 10 位;第 3‑6 位代表网点编码;最后两位代表校验码。
s = "KD24083791",下列能提取网点编码的代码是()
A. s[2:6] B. s[3:7] C. s[-8:-4] D. s[2:-2]
答案:A
解析
s="K D 2 4 0 8 3 7 9 1"索引 0‑9;第 3‑6 位字符对应索引 2,3,4,5,切片s[2:6]。
10.【新情境・图书馆还书队列|选择题,改编新阵地联盟 2026 届联考】
新考法:队列与条件出队结合,不是单纯固定 T/R 操作
图书馆还书队列,队首到队尾[B01,B02,B03,B04]。规则:遇到编号末尾为偶数的书直接出队登记;奇数则出队,放到队尾。循环直到队列为空。出队登记顺序是()
A. B02 B04 B01 B03 B. B01 B02 B03 B04
C. B02 B01 B04 B03 D. B04 B02 B03 B01
答案:A
解析
第一轮:B01 移末尾,登记 B02;队列 B03,B04,B01。
第二轮:B03 移末尾,登记 B04;队列 B01,B03。
第三轮 B01 移末尾;队列 B03,B01。
第四轮 B03 移末尾;队列 B01,B03。
正确登记输出只有 B02、B04;B01、B03 永远奇数不会登记。题目理解:只要出队就登记,偶数登记并移除,奇数登记之后放到队尾。
重新规则理解:出队即登记;偶数登记后丢弃,奇数登记之后追加队尾。
初始:B01,B02,B03,B04
1. 出队 B01(奇,登记,追加队尾)队列 B02,B03,B04,B01 登记序列 [B01]
2. 出队 B02(偶,登记,丢弃)队列 B03,B04,B01 登记序列 [B01,B02]
3. 出队 B03(奇,登记追加队尾)队列 B04,B01,B03 登记序列 [B01,B02,B03]
4. 出队 B04(偶,登记丢弃)队列 B01,B03 登记序列 [B01,B02,B03,B04]
原题选项设置:A 为唯一合理设计,考察学生读懂自定义规则,不是教材原生队列。
11.【新设问:字符串变形统计|程序填空】
新考法:遍历字符串,相邻字符比较,统计连续相同字符段的数量。例如输入"aabbbcc",段为aa、bbb、cc,输出段数 = 3。
s = input()
if len(s)==0:
print(0)
else:
cnt = 1
for i in range( ① ):
if ② :
cnt += 1
print(cnt)
①________;②________
答案
①1, len(s)
②s[i] != s[i‑1]
解析:字符串至少一个字符初始段数 cnt=1;从第 2 个字符 i=1 开始遍历;当前字符和前一个不一样代表开启新字符段,计数 + 1。
12.【新考法:栈模拟运算|程序填空,改编诸暨高三诊断卷】
实现简易后缀表达式计算,数字入栈;遇到运算符弹出两个数运算,结果压回栈。如后缀"3 4 +"等价3+4=7。
exp = input().split()
st=[]
for token in exp:
if token in "+-*/":
b = st.pop()
a = st.pop()
if token=="+":
res = a + b
elif token=="-":
res = a b
elif token=="*":
res = a * b
else:
res = a / b
①
else:
②
print(st[0])
①________;②________
答案:①st.append(res); ②st.append(int(token))
解析:遇到运算符,先后弹出 b、a,计算 res,结果压栈;普通字符串转整数压入栈。后缀表达式注意先弹出的是右操作数 b。
1.【2024 年 1 月浙江选考信息技术 第 8 题|选择题,2 分】21世纪教...
栈 S 从栈底到栈顶的元素依次为 1,2,3,队列 Q 初始为空。约定:U 操作是指元素出栈后入队,H 操作是指元素出队后再入队。经过UUHU系列操作后,队列中队首到队尾的元素依次为()
A.2,1,3 B.3,1,2 C.1,3,2 D.2,3,1
答案:D
解析
栈特点后进先出,队列先进先出。
初始:栈 S(栈底→栈顶):1,2,3;队列 Q:空
1.U:栈顶 3 出栈入队 → Q:[3];栈:[1,2]
2.U:栈顶 2 出栈入队 → Q:[3,2];栈:[1]
3.H:队首 3 出队,加到队尾 → Q:[2,3];栈:[1]
4.U:栈顶 1 出栈入队 → Q:[2,3,1]
最终队列从队首到队尾顺序:2,3,1。
2.【2026 年 6 月浙江选考信息技术 第 8 题|选择题,2 分】
栈初始为空,经过一系列入栈、出栈操作后,栈又为空。若元素入栈的顺序为 1,2,3,4,5,6,7,且每个元素入栈 1 次,最后出栈的两个元素为 5 和 2,则对于所有可行的方案,操作过程中栈内元素个数最多为()
A.3 B.4 C.5 D.6
答案:C
解析
条件:入栈顺序1,2,3,4,5,6,7;全部操作结束栈空;最后两个出栈依次是 5、2。
1. 2 是倒数第 2 个出栈,5 是最后一个出栈。说明:1 必须早于 2 出栈;3、4 必须早于 5 出栈;6、7 必须在 5 出栈之前就已经全部入栈并且全部出栈。
2. 推演:1 出栈,2 留在栈;3 入栈,4 入栈,5 入栈;6、7 依次入栈、出栈;此时栈中保存:2,3,4,5;共 4 个;没有结束;
3. 继续:3 出栈、4 出栈;栈剩下 2,5;之后 5 出栈,再 2 出栈。
关键状态:当 1 已经弹出,2、3、4、5 均在栈内,同时 6 刚入栈还未弹出,此时栈元素:2,3,4,5,6,一共5 个,这是栈最大规模。
7 要在 5 出栈前完成进出,不增加峰值。因此栈内元素最多为 5。
3.【2024 年 1 月浙江选考信息技术 第 11 题|选择题,2 分(字符串双指针随机取字符)】21世纪教...
若字符串s的值为"abcde",执行如下程序段后,变量res的值不可能是()
from random import randint
res = ""
i, j = 0, len(s)-1
while i < len(s) and j >= i:
if randint(0,1) == 0: #randint(0,1)随机生成0或1
res += s[i]
i += 1
else:
res += s[j]
j -= 1
A."abced" B."aecbd" C."aedbc" D."edcba"
答案:B
解析
算法逻辑:i 指向字符串左端,j 指向右端;每一轮随机选择取最左边s[i]或者最右边s[j],指针单向移动,不能直接跳取中间字符。
A 选项abced:取 a,b,c,再取 e,再取 d;可以实现。
B 选项aecbd:取 a 之后取 e,下一轮只能取 b 或 d;无法直接拿到 c,c 是中间字符,没有机会被取出,不可能出现。
C 选项aedbc:a → e → d → b → c,可以实现。
D 选项edcba:全部从右端取,可以实现。
4.【2026 年 1 月浙江选考信息技术 第 10 题|选择题,2 分(字符串循环处理)】学科网
有如下 Python 程序段:
c,i="",0
while i<len(s) and t>=0:
if s[i]=="e":
t -= 1
else:
c += s[i]
i += 1
若s为"keeper",t为2,执行该程序段后,c的值为()
A."k" B."kp" C."kpr" D."kper"
答案:C
解析
s = "keeper"字符索引:0:k,1:e,2:e,3:p,4:e,5:r。初始t=2,c="",i=0。
1.i=0,s [0]='k'≠'e' → c="k";i=1;t=2
2.i=1,s [1]='e' → t=1;i=2;c 不变
3.i=2,s [2]='e' → t=0;i=3;c 不变
4.i=3,s [3]='p'≠'e' → c="kp";i=4;t=0
5.i=4,s [4]='e' → t=-1;i=5;c 不变
循环条件t>=0不再成立,循环终止。i=5 不再执行,字符 r 被加入 c。
最终 c = "kpr"。
5.【2026 年 6 月浙江选考信息技术 第 14 题|非选择题,10 分,队列 + 缓冲区,完整原题】
在葡萄园监控系统中,为防止网络传输不稳定导致的数据丢失,智能终端采用了缓冲机制:智能终端每隔 60 分钟获取一次传感器数据存入缓冲区,然后将缓冲区中的数据按获取顺序一一上传,上传成功的数据从缓冲区中删除;若上传失败,则随机延时 1 至 10 分钟后重试,但重试过程不得影响数据获取的时间间隔。
请回答下列问题:
(1) 若智能终端在某天 8:00,9:00,10:00,11:00 获取的传感器数据依次为 D1,D2,D3,D4,8:30~11:30 网络断开,其他时段数据传输正常,则智能终端在 11:00 以后上传成功的第 2 个数据是________。(2 分)
(2) 实现上述功能的部分 Python 程序如下,请在划线处填入合适的代码。
#导入相关库,代码略
from random import randint
from time import sleep
def trans(data):
#将data上传至服务器,上传成功返回1,否则返回0,代码略
pass
buf = []
while True:
#获取传感器数据,存入变量data中,代码略
buf.append(data) #将传感器数据存入缓冲区
stime = 60
while stime>0 and ① :
data = buf[0]
state = trans(data)
if ② :
buf.pop(0) #将上传成功的数据从缓冲区中删除
else:
delay = randint(1, 10) #随机生成1到10之间的整数
if delay stime:
delay = stime
sleep(delay * 60 * 1000)
③
sleep(stime * 60 * 1000)
①________;②________;③________(每空 2 分,共 6 分)
答案
(1) D3
(2) ① len(buf) 0(或buf);② state == 1;③ stime = stime delay
解析
(1) 8:30‑11:30 网络断开,D1、D2、D3、D4 全部存入缓冲区。11:00 后网络恢复,按顺序上传:第 1 个 D1,第 2 个 D3。
(2)
① 内层 while 循环处理缓冲区上传,缓冲区不为空才处理,条件len(buf)>0。
② trans 函数成功返回 1,上传成功则删除队首,判断state ==1。
③ 扣除已经消耗掉的延时时间stime = stime‑delay,保证总计时 60 分钟,重试不影响采集周期。
参考答案汇总速查
课标达标练 1.A;2.A;3.C;4.B;5.B;6.A;7."A" <= ch <= "Z";8.①st.pop(),②len(st)!=0
核心达标练 9.A;10.A;11.①1, len(s),②s[i] != s[i1];12.①st.append(res),②st.append(int(token))
学科网(北京)股份有限公司1 / 17
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$