版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.3栈新课导入装置只有一端是开放的,所有的操作都只能在这开放的一端进行。数据具有“先进后出、后进先出”的特征,可采用“栈”这种数据结构。栈栈是一种后进先出的线性表,仅允许在表的一端进行插入或删除操作。进行插入或删除操作的一端称为栈顶,位于栈顶位置的元素称为栈顶元素;另一端称为栈底,位于栈底位置的元素称为栈底元素。栈顶元素栈底元素栈的特性先进后出、后进先出有限序列性元素的个数是有限的,栈可以为空,也可包含多个元素。栈中元素呈现线性特征,栈顶元素有一个前驱点,栈底元素有一个后继点,其它元素既有一个前驱点又有一个后继点。栈顶元素栈底元素牛刀小试1.有六个元素按照6,5,4,3,2,1的顺序依次进栈,则出栈顺序不可能是()5,4,3,6,1,24,5,3,1,2,63,4,6,5,2,12,3,4,1,5,62.一个栈的入栈序列是1,2,3,4,5,其出栈序列为s1,s2,s3,s4,s5,若s2是3,则s1不可能是()A.1B.2C.4D.5CD栈的创建:数组创建栈一般按照顺序结构存储,可以使用数组来实现。栈顶元素在数组中的位置会发生改变,因此使用top变量来记录栈顶元素在数组中的位置。栈的创建:链表创建栈的链式存储称为链栈,设置栈顶指针top为链栈的头指针。特点:克服了用数组实现的顺序栈空间利用率不高的缺点,但要为每个栈元素分配额外的指针空间。栈操作(建栈\入栈IN\出栈OUT)例:有5个字母“a”“b”“c”“d”“e”按序入栈,可创建长度为5的栈st:初始为空串,
栈顶指针top设置为-1代码示例:top=-1st=[“”]*5栈按顺序结构存储,通过数组实现,所以Python可使用列表创建栈栈操作(建栈\入栈IN\出栈OUT)栈顶指针top记录栈顶元素的位置,初始值为-1,进栈一个元素,top指针加1,即st[top]=栈顶元素栈操作(建栈\入栈IN\出栈OUT)top=-1#初始值top=top+1 #top=0st[top]=”a”#a入栈,top指向a的位置top=top+1 #top=1st[top]=”b”#b入栈,top指向b的位置top=top+1 #top=2st[top]=”c”#c入栈,top指向c的位置top=top+1 #top=3st[top]=”d”#d入栈,top指向d的位置top=top+1 #top=4st[top]=”e”#e入栈,top指向e的位置栈操作(建栈\入栈IN总结\出栈OUT)停止入栈的条件是什么?st=[“”]*5top=-1while______________top+=1st[top]=“*”top<len(st):栈操作(建栈\入栈IN\出栈OUT)出栈,排在栈顶的元素依次出栈,top指针变量依次减1,直至top的值等于-1栈操作(建栈\入栈IN\出栈OUT)top=4#初始值st[top]=””#e出栈top=top-1 #top=3,top指向d的位置st[top]=””#d出栈top=top-1 #top=2,top指向c的位置st[top]=””#c出栈top=top-1 #top=1,top指向b的位置st[top]=””#b出栈top=top-1 #top=0,top指向a的位置st[top]=””#a出栈top=top-1 #top=-1,栈空停止出栈的条件是什么?top=len(st)-1while____________print(st[top])st[top]=“”top-=1top!=-1:栈应用1:十进制数转换为二进制数算法思想:1)用栈结构存放每次获得的余数2)根据栈特征输出每次获得的余数st=[0]*100#初始值为0top=-1num=int(input(“输入十进制数”))whilenum!=0:___________________________#将余数放入栈num=num//2whiletop!=-1:print(st[top],end=“”)______________________________top+=1st[top]=num%2st[top]=“”top-=1括号匹配将表达式中数字和运算符号忽略,直接判断左右括号的数量和位置是否匹配,判断过程用栈结构来实现:若出现左括号则进栈,右括号则把栈顶的左括号出栈,判断是否匹配,分下列3种情况:栈空,出现右括号,不匹配。扫描结束,栈中还有左括号,不匹配。扫描结束,栈空,匹配。数据合并问题程序备注st=[""]*100#初始化
top=-1#初始化为空栈
flag=True#标记是否有不匹配的情况
s=input("请输入数学表达式:")初始化各项数据foriinrange(len(s)):
ifs[i]=="(":#左括号入栈
top+=1
st[top]=s[i]
elifs[i]==")":#右括号与栈顶元素比较
iftop==-1:
flag=False
break
else:
top-=1从左往右逐步处理数学表达式:若为左括号则入栈;若为右括号则与栈顶指针进行匹配。数据合并问题程序备注iftop>0:#栈中还有剩余元素
flag=False栈中还有剩余元素,即左括号数量大于右括号。ifflag:
print("括号匹配")
else:
print("括号不匹配")请输入数学表达式:(((a+b)*(c-d)-e)/f)括号匹配请输入数学表达式:((a+b)*c)-d)+(e括号不匹配字母A、B、C、D、E、F依次入栈,然后依次出栈并输出foriin"ABCDEF":
top+=1
st[top]=i
whiletop>-1:
print(st[top],"出栈")
top-=1st=[]
foriin"ABCDEF":
st.append(i)
print(len(st))
foriinrange(len(st)):
print(st.pop(),"出栈“)用列表自带函数和方法实现栈逆波兰表达式逆波兰表达式(后缀表达式):将运算符置于其运算对象之后,没有括号,无需考虑运算符号的优先级。中缀表达式转后缀表达式:表达式中加入括号;将所有运算符移到对应括号的右边;删除所有的括号。逆波兰表达式计算:从左往右扫描逆表达式,遇到数字入栈;遇到运算符号,将栈中最上方的两个元素依次出栈并用运算符计算,将计算结果压入栈中。重复上述过程直至表达式扫描结束。表达式第一步第二步第三步a+b*c(a+(b*c))(a(bc)*)+abc*+6+(8-2)*2/3(6+(((8-2)*2)/3))(6(((82
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年全国统考教师资格考试《教育教学知识与能力(小学)》练习题审定版附答案详解
- 2024-2025学年度宝鸡职业技术学院单招《语文》综合提升测试卷附参考答案详解【综合题】
- 2024-2025学年农村信用社招聘考试题库试题(精练)附答案详解
- 2024-2025学年度执业兽医测试卷及参考答案详解(综合卷)
- 2024-2025学年度施工员模拟题库含答案详解AB卷
- 2024-2025学年度监理工程师全真模拟模拟题及完整答案详解【名校卷】
- 2024-2025学年度天津城市建设管理职业技术学院单招数学练习题及参考答案详解【研优卷】
- 2024-2025学年度计算机四级考前冲刺练习题及参考答案详解(研优卷)
- 2024-2025学年度广东环境保护工程职业学院妇产护理期末模拟试题带答案详解(突破训练)
- 企业资产完备无损承诺书(6篇)
- 汽轮机组试车方案
- 漆安慎力学第二版课后习题解答及漆安慎-力学答案
- PCI围术期强化他汀治疗的获益和机制课件
- 沥青搅拌站安全生产风险分级管控体系方案资料(2022-2023版)
- WTO海关估价协议中文版
- 【广东省】工作证明模板(仅供参考)
- YS/T 613-2006碳膜电位器用电阻浆料
- GB/T 33365-2016钢筋混凝土用钢筋焊接网试验方法
- GB/T 17626.10-2017电磁兼容试验和测量技术阻尼振荡磁场抗扰度试验
- GB/T 14536.6-2008家用和类似用途电自动控制器燃烧器电自动控制系统的特殊要求
- 《乡风文明建设》(王博文)
评论
0/150
提交评论