高中信息技术浙教版选修1+算法与程序设计2队列和栈专题复习课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
while top>=0:
print(st[top],end=“”) #出栈
top=top-1
请输入十进制整数: 13 输出: 1101
字符串的实现方 法?空列表的实 现方法?数组?
练一练
【举一反三1】有如下Python程序段:
num=int(input(“请输入一个整数[-128,127]:”))
算法思想: 1)用栈结构存放每次获得的余数 2)根据栈特征输出每次获得的余数
st=[-1]*100
#列表中元素初始值为-1
top=-1
number=int(input(“请输入十进制整数:”))
while number>0:
x=number%2
top=top+1
st[top]=x
#入栈
number=number//2
各地二模队列栈汇总:2304嘉兴二模12题 C
各地二模队列栈汇总:2304金华二模12题 B
各地二模队列栈汇总:2304湖丽衢二模12 题
B
各地二模队列栈汇总:2304湖丽衢二模9题 D
A
将一个十进制数转换为二进制数,根据入栈、出栈的步骤, 采用Python编写的完整程序及测试结果如下所示:
二、队列和栈的基本操作
存储 建队 入队 出队 存储 建栈 入栈 出栈
存储
★ 队列的存储结构:顺序结构存储(线性表结构),可以用数组来实现,也可用链表来实现。
〄 头指针head: 记录队首元素位置 〄 尾指针tail: 记录队尾元素的下一个位置 〄 初始时为空列表时,head和tail 均记录下标为0的位置
D.head==tail
4. 用python列表模拟队列,并设置队头指针head指向队首元素,队尾
指针tail指向队尾元素的下一个位置,则当head=3,tail=6时,队
A 列中元素的个数为( )
A.3
B.4
C.5
D.6
各地二模队列栈汇总:2304绍兴二模11题 A
各地二模队列栈汇总:2304嘉兴二模9题 A
队列和栈复习
一、队列的概念及特性
★ 概念:一种先进先出的线性表,允许插入的一端称为队尾,允许删除的一端称为队首。
★ 特性:〠先进先出、后进后出
〠有限序列性——队列是一种线性表结构,元素个数有限。队列可以为空。
二、栈的概念及特性
★ 概念:一种操作受限的线性表,仅允许在表的一端进行插入或删除。进行插入或删除操作的一
测试2
#建队 head=tail=0 que=[] #入队 for i in “伊朗真真不错":
que.append(i) #出队 tail=len(que) while len(que)!=0:
print(que.pop(head)) print(que)
#建栈: top=-1 stack=[] #入栈: for i in “伊朗真真不错":
C print(".join(st[::-1]))
则当输入26时,程序输出结果为(
)
A.10011010 B.11100101 C.0001 1010 D.11010
浙教版新教材(2019)《数据与数据结构》选择性必修1——3.2+3.3 队列和栈复习
出栈
#出栈1、2:
while top>-1: print(stack[top]) top-=1
top!=-1
#出队3 head=0
len(que)!=0: head+=1
#出栈3:
while len(stack)!=0: print(stack.pop())
测试1
#建队 head=tail=0 que=[""]*6 #入队 for i in “中国男足加油”:
存储
★ 栈的存储结构:顺序结构存储(线性表结构),可以用数组来实现。
〄 栈顶指针top: 记录当前栈顶元素位置 〄 初始时为空栈时,top值为-1
建队
建队1:
head=0 tail=0 que=[""]*6
建栈
建栈1:
top=-1 stack=[""]*6
建队2:
head=0 tail=0 que=[0]*6
st=[]
if num>=0:
for i in range(7):
st.append(str(num%2))
num//=2
st.append("0")
else:
num=-num
for i in range(7):
st.append(str(1-num%2))
num//=2
st.append("1")
三、循环队列
tail=6
头啊 付月月 章鼎昊 李帅 宋炜涛 陈悦
定义的列表是 否为空?是否
能入队?
head=0
尝试设计
head=6
循环队列: 将队列的队首和队尾连接起来,形成逻辑上的环状结构。 当对循环队列中的元素进行入队、出队操作时,队首指针变量和队尾指针变量可以循环指 向所有位置,从而有效地解决队列中“有空闲位置却不能入队”的问题。
C. 链表在访问、插入和删除元素时,算法效率比数组高
D. 栈是一种先进后出的线性表结构
2.【2022年12月强基联盟信息技术第8题】
用一个大小为60的数组来做循环队列,循环队列需要牺牲队尾和队头之间一个存储空间
来区分队空和队满,队头元素指针是head,队尾指针tail指向最后一个元素的下一个位置,
que[tail]=i tail+=1 #出队 while head!=tail: print(que[head]) head+=1 Print(que)
#建栈: top=-1 stack=[""]*6 #入栈: for i in “中国男足加油” :
top+=1 stack[top]=i #出栈: while top>-1: print(stack[top]) top-=1 Print(stack)
stack.append(i) #出栈: while len(stack)!=0:
print(stack.pop()) print(stack)
1.【2022年9月嘉兴基础测试信息技术第9题】
D 下列关于数据结构的说法,正确的是( )
A. 常见的线性关系数据结构有数组、队列、栈、树和图等
B. 数组和链表在操作时,其存储空间固定不变
建栈2:
top=-1 stack=[0]*6
建队3:
head=0 tail=0 que=[]
建栈3: top=-1
stack=[]
入队
#入队1
for i in “亚洲足球崛起”: que[tail]=i tail+=1
#入队2
for i in range(1,20,3): que[tail]=i tail+=1
循环队列各种状态的判断: 利用队首和队尾(队首索引为head,队尾为tail,队列最 大长度为n)指针位置判定循环队列状态: 队列为空:head=tail 队列为满:(tail+1)%n=head 队列长度:(tail-head+n)%n 入队:tail=(tail+1)%n 入队x个:tail=(tail+x)%n 出队:head=(head+1)%n 出队y:head=(head+y)%n
端称为栈顶,位于栈顶位置的元素称为栈顶元素;相应地,将表的另一端称为栈底,位于栈底位 置的元素为栈底元素。
★ 特性:〠先进后出、后进先出
〠有限序列性——栈是一种线性表结构,元素个数有限。栈可以为空。
队列特性(单向队列)
栈特性
①队列长度:tail-head
①栈的长度:top+1
②空队列判断:if tail==head ②非空栈的判断:if top!=-1
(只有非空队列,才能出栈取数) (只有非空栈,才能出栈取数)
③入队:q[tail]=值, tail=tail+1 ④出队:取q[head], head=head+1 ⑤队列切片:q[head:tail]表示 队列内所有元素
③入栈:top=top+1, stack[top]=值 ④出栈:取stack[top], top=top-1 ⑤栈切片:st[:top+1]表示栈内 所有元素
#入队3
入栈
#入栈1:
for i in “亚洲足球崛起” : top+=1 stack[top]=i
#入栈2:
for i in range(1,20,3) : top+=1 stack[top]=i
#入栈3:
出队
#出队1、2
while head!=tail: print(que[head]) head+=1
⑥满队列判断:if tail==n: ⑥满栈的判断:if top==n-1:
重难点2 循环队列
对于队列的操作,由于多次出队、入队操作后,就会出现tail指针已经指向了队列最后一个位置,这样队尾无法 继续进行入队操作,而head指针前又存在空余部分,这种现象叫作队列"假溢出",如下图所示:
解决"假溢出"的办法,可在队满时,就再从数组的前部继续入队,形成头尾相接的结构。我们把队列的这种头尾 相接的顺序存储结构称为循环队列,如下图所示。
当(tail+1)%60==head时表示队满,则当head等于54,tail等于3的时候,先出队8个
元素,再入队20个元素,则head和tail分别是
B
A. 1,22
B. 2,23
C. 23,2
D. 22,1
D 3.判断一个长度为n的队列q为空的条件是( )
A.head==0 B.tail==0 C.tail==-1