数据结构第六次课-栈和队列B.ppt
《数据结构第六次课-栈和队列B.ppt》由会员分享,可在线阅读,更多相关《数据结构第六次课-栈和队列B.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、电气信息学院 计算机系数据结构每课一贴:原来很简单 有一个人去应征工作,随手将走廊上的纸屑捡起来,放进了垃圾桶,被路过的口试官看到了,因此他得到了这份工作。原来获得赏识很简单,养成好习惯就可以了。住在田边的青蛙对住在路边的青蛙说:你这里太危险,搬来跟我住吧!路边的青蛙说:我已经习惯了,懒得搬了。几天后,田边的青蛙去探望路边的青蛙,却发现他已被车子压死,暴尸在马路。原来掌握命运的方法很简单,远离懒惰就可以了。1电气信息学院 计算机系数据结构2.逻辑结构逻辑结构 与同线性表相同,仍为一对一关系与同线性表相同,仍为一对一关系。3.运算规则运算规则 只能在只能在栈顶栈顶运算,且访问结点时依照运算,且访
2、问结点时依照后进先出后进先出 (LIFOLIFO)或先进后出或先进后出(FILOFILO)的原则。的原则。4.出栈顺序:出栈顺序:1.定义定义 限定只能在限定只能在表的一端表的一端进行插入和删除运算的进行插入和删除运算的2.线性表线性表(只能在(只能在栈顶栈顶操作)操作)上次课内容回顾上次课内容回顾2电气信息学院 计算机系数据结构讨论:有无通用的判别原则?讨论:有无通用的判别原则?有。在可能的输出序列中,不存在这样的输入序列有。在可能的输出序列中,不存在这样的输入序列i i,j j,k k,能同时满足能同时满足入栈入栈顺序顺序i i,j j,k k 和和 出栈出栈顺序顺序k k,i i,j j
3、。例例4 4 一个栈的输入序列为一个栈的输入序列为1234512345,若在入栈的过,若在入栈的过程中允许出栈,则可能得到的出栈序列程中允许出栈,则可能得到的出栈序列有多少种,有多少种,分别是什么分别是什么?3电气信息学院 计算机系数据结构例例1:回文游戏回文游戏 设计思路:用栈暂存回文设计思路:用栈暂存回文例例2:数制转换数制转换(十转(十转N)设计思路:用栈暂存低位值设计思路:用栈暂存低位值例例3:括号匹配的检验:括号匹配的检验 设计思路:用栈暂存左括号设计思路:用栈暂存左括号例例4:表达式求值表达式求值 设计思路:用栈暂存运算符设计思路:用栈暂存运算符 简化程序设计问题简化程序设计问题4
4、电气信息学院 计算机系数据结构v回文游戏:顺读与逆读字符串一样(不含空格)dadtop1.读入字符串2.压入栈3.原串字符与出栈字符依次比较 若不等,非回文 若直到栈空都相等,则是回文有没有更简洁的办法呢?(读入字符串,压入n/2个字符,n为字符个数)v多进制输出:字符串:“madam I madam”“上海自来水来自海上”例 把十进制数159转换成八进制数(159)10=(237)815981982802 3 7 余 7余 3余 2toptop7top73top7325电气信息学院 计算机系数据结构v多进制输出:例 把十进制数159转换成八进制数(159)10=(237)8159819828
5、02 3 7 余 7余 3余 2toptop7top73top732public class Test public static void main(String args)int i=159;String binStr=Integer.toBinaryString(i);String otcStr=Integer.toOctalString(i);String hexStr=Integer.toHexString(i);System.out.println(binStr);6电气信息学院 计算机系数据结构v多进制输出:import java.util.*;class T public st
6、atic void main(String args)System.out.println(toOctal(159);public static String toOctal(int a)String str=;Stack s=new Stack();while(a!=0)s.push(a%8);a=a/8;while(!s.empty()str+=s.pop();return str;例 把十进制数159转换成八进制数7电气信息学院 计算机系数据结构例如:例如:3*(7 2)(1)要正确求值,首先了解算术四则运算的规则:要正确求值,首先了解算术四则运算的规则:a.从左算到右从左算到右 b.先
7、乘除,后加减先乘除,后加减 c.先括号内,后括号外先括号内,后括号外 由此,由此,通常通常此表达式的计算顺序为:此表达式的计算顺序为:3*(7 2)=3*5=15v 表达式求值(这是栈应用的典型例子)这里,这里,表达式求值的算法是表达式求值的算法是 “算符优先法算符优先法”。8电气信息学院 计算机系数据结构表达式表示法表达式表示法 算术表达式中最常见的表示法形式有 中缀、前缀和 后缀表示法。中缀表示法是书写表达式的常见方式,而前缀和后缀表示法主要用于计算机科学领域。中缀表示法中缀表示法 Syntax:operand1 operator operand2Example:(A+B)*C-D/(E+
8、F)前缀表示法前缀表示法-波兰表示法(波兰表示法(Polish notation,PN)Syntax :operator operand1 operand2Example:-*+ABC/D+EF后缀表示法后缀表示法-逆波兰表示法(逆波兰表示法(Reverse Polish Notation,RPN)Syntax :operand1 operand2 operatorExample:AB+C*DEF+/-无操作符优先级问题,求值简单无操作符优先级问题,求值简单9电气信息学院 计算机系数据结构1.中缀表达式到后缀表达式的转换 要把表达式从中缀表达式的形式转换成用后缀表示法表示的等价表达式,必须了解
9、操作符的优先级和结合性。优先级或者说操作符的强度决定求值顺序;优先级高的操作符比优先级低的操作符先求值。如果所有操作符优先级一样,那么求值顺序就取决于它们的 结合性。操作符的结合性定义了相同优先级操作符组合的顺序(从右至左或从左至右)。Left associativity :A+B+C=(A+B)+CRight associativity:ABC=A(BC)常用表达式求值方法常用表达式求值方法1.中缀表达式转换成后缀表达式2.计算后缀表达式10电气信息学院 计算机系数据结构转换算法:1.读入运算对象(数据),直接输出2.遇到(运算符进栈3.遇到)运算符,则栈内的最上一个(以上的所有运算符退栈,
10、(也退栈4.读入运算符,进入运算栈 4.1 后进栈的运算符 先进栈的运算符,运算符进栈 (优先级比较)4.2 后进栈的运算符=先进栈的运算符,将栈内的运算符退栈输出,再进栈11电气信息学院 计算机系数据结构31*(5-22)+7012电气信息学院 计算机系数据结构后缀表达式求值后缀表达式求值 对后缀表达式求值比直接对中缀表达式求值简单。在后缀表对后缀表达式求值比直接对中缀表达式求值简单。在后缀表达式中,达式中,不需要括号,而且操作符的优先级也不再起作用了不需要括号,而且操作符的优先级也不再起作用了。可以用如下算法对后缀表达式求值:初始化一个空堆栈 从左到右读入后缀表达式 如果字符是一个操作数,
11、把它压入堆栈。如果字符是个操作符,弹出两个操作数,执行操作,然后把结果压入堆栈。到后缀表达式末尾,从堆栈中弹出结果。若后缀表达式格式正确,那么堆栈应该为空。13电气信息学院 计算机系数据结构31*(5-22)+70参看Class1.java代码14电气信息学院 计算机系数据结构1.顺序栈的一般定义/堆栈接口public interface Stack public int getSize();public boolean isEmpty();public void push(Object e);public Object pop()throws StackEmptyException;publ
12、ic Object peek()throws StackEmptyException;二.基本操作的程序实现基本操作的程序实现15电气信息学院 计算机系数据结构1.顺序栈的一般定义public class StackArray implements Stack private final int LEN=8;/private Object elements;/private int top;public StackArray()top=-1;elements=new ObjectLEN;public int getSize()return top+1;public boolean isEmpt
13、y()return top=elements.length)expandSpace();elements+top=e;二.基本操作的程序实现基本操作的程序实现16电气信息学院 计算机系数据结构 private void expandSpace()Object a=new Objectelements.length*2;for(int i=0;ielements.length;i+)ai=elementsi;elements=a;public Object pop()throws StackEmptyException if(getSize()1)throw new StackEmptyExce
14、ption(“错误,堆栈空”);Object obj=elementstop;elementstop-=null;return obj;public Object peek()throws StackEmptyException if(getSize()1)throw new StackEmptyException(“错误,堆栈空”);return elementstop;17电气信息学院 计算机系数据结构l入栈算法l 出栈算法 .栈底toptopxptop .栈底topq链栈基本操作P67 Stack的链式存储实现初始化、判断栈空、栈满、初始化、判断栈空、栈满、入栈、出栈入栈、出栈、取栈顶元
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第六 队列
限制150内