高中信息技术第三章 字符串、队列和栈3.3 栈优秀课件ppt
展开想一想:子弹是如何进出弹匣的呢?它有哪些特点?
子弹进出弹匣的过程有下列特点:
①整个装置只有一端开放(最上端),而且进、出只能在这一端进行。②弹匣中的子弹成一纵队排列。③任何子弹进出弹匣的规律是“先进后出、后进先出” 。
1.栈是一种先进后出的线性表。2.允许出入、删除的一端称为栈顶, 不能操作的称为栈底。3.两大特性: ①先进后出,后进先出 ②有限序列性
生活中还有哪些类似的例子?
tp:记录栈顶元素在数组中的位置
栈思想如何程序实现?栈的顺序存储结构:利用数组存放元素。
tp=-1st=[“”]*4
tp+=1st[tp]=“A”tp+=1st[tp]=“B”tp+=1st[tp]=“C”tp+=1st[tp]=“D”
while tp>=0: print(st[tp]) tp-=1
思考1:同学们,你能描述出栈的过程吗?
1.元素A、C、D、G、K、L、M依次入栈,则不可能的出栈顺序是:A.CDKGAMLB.GDACLMKC.AKGLDMCD.GDLKCAM
规律:一个元素出栈后,下一个出栈的元素只能是它已经入栈的相邻元素或者是未入栈的任一个元素。B中的A不可能在C前先出栈。
同学们,栈的思想理解了吗?我们试一试栈的典型应用
栈的典型应用:进制转换
入栈过程:①tp记录栈顶元素在数组中的位置,初始值为-1②除2取余,若商不为0,余数入栈,商作为新的被除数。 若商为0,余数出栈,输出结果。用栈st存储每次得到 的余数,num存储被除数。
活动1:编写进制转换的程序
num=int(input(“输入一个十进制数:")) sta=[] #空栈 tp=-1 #栈顶指针 while num>0: #入栈 a=num%2 sta.append(a) tp+=1 num=num//2 while tp>-1: #出栈 print(sta[tp],end="") tp=tp-1
数学运算表达式在计算机中是如何处理的呢?例如:3+4*2-7
思考2:人是如何计算数学表达式的呢?(完成学习任务单,请描述如何计算)
1.眼睛从左往右扫过表达式
2.发现乘号运算符等级最高, 计算4*2=8
3.比较运算符优先级,计算3+8=11
4.比较运算符优先级,计算11-7=4
思考3:计算机是如何计算表达式的呢?
①.从左到右,逐个遍历算式
④.取出运算数4,能不能计算结果
⑤.取出运算符*,比较运算符优先级
⑥.取出运算数2,能不能计算结果
⑦.取出运算符-,比较运算符优先级,比乘号低,先计算乘号。将之前的数重新拿出来。符合了先进后出,后进先出的特点,所以是栈的数据结构
为什么使用逆波兰表达式?
①在数学运算表达式中,运算符总是置于与之相关的两个运算对象之间,在计算结果时,要考虑括号、运算符号的优先性。②为了程序实现的方便,波兰逻辑学家J.Lukasiewicz提出了另一种表示法,将运算符置于其运算对象之后,没有括号,不用考虑运算符号的优先性。这种表达式称为后缀表达式,又叫逆波兰表达式,如表达式“682-2*3÷+”是“6+(8-2)*2÷3”的逆波兰表达式
如何转换逆波兰表达式?
体验获取3+4*2-7的逆波兰表达式
设计算法:如何将中缀表达式转为后缀表达式(无括号)1、初始化运算符栈S12、依次从数组中取出各个字符,根据字符做不同处理3、遇到运算数时,将其输出4、遇到运算符时,比较其与S1栈顶运算符的优先级:5、重复步骤2至4,直到表达式遍历结束6、将S1中剩余的运算符依次弹出
活动2:逆波兰式的算法设计
设计算法:如何将中缀表达式转为后缀表达式(无括号)1、初始化运算符栈S12、依次从数组中取出各个字符,根据字符做不同处理3、遇到运算数时,将其输出4、遇到运算符时,比较其与S1栈顶运算符的优先级: 如果运算符栈S1为空,则直接将此运算符入栈;否则如果优先级比栈顶运算符的高,也将运算符压入S1;否则将S1栈顶的运算符弹出。再次转到4与S1中新的栈顶运算符相比较。5、重复步骤2至4,直到表达式遍历结束6、将S1中剩余的运算符依次弹出
活动3:逆波兰式的算法设计
活动3:体验算术 6+(5*2+8)/9的逆波兰表达式的转化过程
6 5 2 * 8 + 9 / +
活动4设计算法:如何将中缀表达式转为后缀表达式(有括号)1、初始化运算符栈S12、依次从数组中取出各个字符,根据字符做不同处理3、遇到操作数时,将其输出4、遇到运算符时,比较其与S1栈顶运算符的优先级:5 、遇到括号时:6、重复步骤2至5,直到表达式遍历结束7、将S1中剩余的运算符依次弹出;
活动4设计算法:如何将中缀表达式转为后缀表达式(有括号)1、初始化运算符栈S12、依次从数组中取出各个字符,根据字符做不同处理3、遇到操作数时,将其输出4、遇到运算符时,比较其与S1栈顶运算符的优先级:若S1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈;否则,若优先级比栈顶运算符的高,也将运算符压入S1(注意必须是高,相同和低于都不行);否则,将S1栈顶的运算符弹出,再次转到4与S1中新的栈顶运算符相比较.5 、遇到括号时:如果是左括号“(”,则直接压入S1;如果是右括号“)”,则依次弹出S1栈顶的运算符,直到遇到左括号为止,此时将这一对括号丢弃6、重复步骤2至5,直到表达式遍历结束7、将S1中剩余的运算符依次弹出
选修1 数据与数据结构第二章 数据与链表2.2 链表优质课件ppt: 这是一份选修1 数据与数据结构第二章 数据与链表2.2 链表优质课件ppt,文件包含221链表的概念特性基本操作课件pptx、221链表的概念特性基本操作教学设计doc等2份课件配套教学资源,其中PPT共26页, 欢迎下载使用。
选修1 数据与数据结构第二章 数据与链表2.1 数组公开课课件ppt: 这是一份选修1 数据与数据结构第二章 数据与链表2.1 数组公开课课件ppt,文件包含211数组的概念特性基本操作课件pptx、211数组的概念特性基本操作教学设计doc等2份课件配套教学资源,其中PPT共26页, 欢迎下载使用。
高中信息技术教科版 (2019)选修1 数据与数据结构5.1 栈结构及其实现集体备课课件ppt: 这是一份高中信息技术教科版 (2019)选修1 数据与数据结构5.1 栈结构及其实现集体备课课件ppt,共16页。PPT课件主要包含了栈应用2括号匹配,编写程序等内容,欢迎下载使用。