数据结构栈和队列B.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构栈和队列B.pptx》由会员分享,可在线阅读,更多相关《数据结构栈和队列B.pptx(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第1页2.逻辑结构 与同线性表相同,仍为一对一关系。3.运算规则 只能在栈顶运算,且访问结点时依照后进先出后进先出 (LIFOLIFO)或先进后出或先进后出(FILOFILO)的原则。的原则。4.出栈顺序:1.定义 限定只能在表的一端进行插入和删除运算的 线性表(只能在栈顶操作)上次课内容回顾第1页/共34页第2页讨论:有无通用的判别原则?有。在可能的输出序列中,不存在这样的输入序列有。在可能的输出序列中,不存在这样的输入序列i i,j j,k k,能同时满足,能同时满足入栈入栈顺序顺序i i,j j,k k 和和 出栈出栈顺序顺序k k,i i,j j。例例4 4 一个栈的输入序列为一个栈的
2、输入序列为1234512345,若在入栈的过,若在入栈的过程中允许出栈,则可能得到的出栈序列程中允许出栈,则可能得到的出栈序列有多少种,有多少种,分别是什么分别是什么?第2页/共34页第3页例1:回文游戏 设计思路:用栈暂存回文例2:数制转换(十转N)设计思路:用栈暂存低位值例3:括号匹配的检验 设计思路:用栈暂存左括号例4:表达式求值 设计思路:用栈暂存运算符 简化程序设计问题简化程序设计问题第3页/共34页第4页v回文游戏:顺读与逆读字符串一样(不含空格)dadtop1.读入字符串2.压入栈3.原串字符与出栈字符依次比较 若不等,非回文 若直到栈空都相等,则是回文有没有更简洁的办法呢?(读
3、入字符串,压入n/2个字符,n为字符个数)v多进制输出:字符串:“madam I madam”“上海自来水来自海上”例 把十进制数159转换成八进制数(159)10=(237)815981982802 3 7 余 7余 3余 2toptop7top73top732第4页/共34页第5页v多进制输出:例 把十进制数159转换成八进制数(159)10=(237)815981982802 3 7 余 7余 3余 2toptop7top73top732public class Test public static void main(String args)int i=159;String binSt
4、r=Integer.toBinaryString(i);String otcStr=Integer.toOctalString(i);String hexStr=Integer.toHexString(i);System.out.println(binStr);第5页/共34页第6页v多进制输出:import java.util.*;class T public static void main(String args)System.out.println(toOctal(159);public static String toOctal(int a)String str=;Stack s=n
5、ew Stack();while(a!=0)s.push(a%8);a=a/8;while(!s.empty()str+=s.pop();return str;例 把十进制数159转换成八进制数第6页/共34页第7页例如:3*(7 2)(1)要正确求值,首先了解算术四则运算的规则:a.从左算到右 b.先乘除,后加减 c.先括号内,后括号外 由此,通常此表达式的计算顺序为:3*(7 2)=3*5=15v 表达式求值(这是栈应用的典型例子)这里,这里,表达式求值的算法是表达式求值的算法是 “算符优先法算符优先法”。第7页/共34页第8页表达式表示法 算术表达式中最常见的表示法形式有 中缀、前缀和
6、后缀表示法。中缀表示法是书写表达式的常见方式,而前缀和后缀表示法主要用于计算机科学领域。中缀表示法 Syntax:operand1 operator operand2Example:(A+B)*C-D/(E+F)前缀表示法-波兰表示法(Polish notation,PN)Syntax :operator operand1 operand2Example:-*+ABC/D+EF后缀表示法-逆波兰表示法(Reverse Polish Notation,RPN)Syntax :operand1 operand2 operatorExample:AB+C*DEF+/-无操作符优先级问题,求值简单第8
7、页/共34页第9页1.中缀表达式到后缀表达式的转换 要把表达式从中缀表达式的形式转换成用后缀表示法表示的等价表达式,必须了解操作符的优先级和结合性。优先级或者说操作符的强度决定求值顺序;优先级高的操作符比优先级低的操作符先求值。如果所有操作符优先级一样,那么求值顺序就取决于它们的 结合性。操作符的结合性定义了相同优先级操作符组合的顺序(从右至左或从左至右)。Left associativity :A+B+C=(A+B)+CRight associativity:ABC=A(BC)常用表达式求值方法1.中缀表达式转换成后缀表达式2.计算后缀表达式第9页/共34页第10页转换算法:1.读入运算对象
8、(数据),直接输出2.遇到(运算符进栈3.遇到)运算符,则栈内的最上一个(以上的所有运算符退栈,(也退栈4.读入运算符,进入运算栈 4.1 后进栈的运算符 先进栈的运算符,运算符进栈 (优先级比较)4.2 后进栈的运算符=先进栈的运算符,将栈内的运算符退栈输出,再进栈第10页/共34页第11页31*(5-22)+70第11页/共34页第12页后缀表达式求值 对后缀表达式求值比直接对中缀表达式求值简单。在后缀表达式中,不需要括号,而且操作符的优先级也不再起作用了。可以用如下算法对后缀表达式求值:初始化一个空堆栈 从左到右读入后缀表达式 如果字符是一个操作数,把它压入堆栈。如果字符是个操作符,弹出
9、两个操作数,执行操作,然后把结果压入堆栈。到后缀表达式末尾,从堆栈中弹出结果。若后缀表达式格式正确,那么堆栈应该为空。第12页/共34页第13页31*(5-22)+70参看Class1.java代码第13页/共34页第14页1.顺序栈的一般定义/堆栈接口public interface Stack public int getSize();public boolean isEmpty();public void push(Object e);public Object pop()throws StackEmptyException;public Object peek()throws Stac
10、kEmptyException;二.基本操作的程序实现第14页/共34页第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 isEmpty()return top=elements.length)expandSpac
11、e();elements+top=e;二.基本操作的程序实现第15页/共34页第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 StackEmptyException(“错误,堆栈空”);Object obj=elementstop;elementstop-=n
12、ull;return obj;public Object peek()throws StackEmptyException if(getSize()1)throw new StackEmptyException(“错误,堆栈空”);return elementstop;第16页/共34页第17页l入栈算法l 出栈算法 .栈底toptopxptop .栈底topq链栈基本操作P67 Stack的链式存储实现初始化、判断栈空、栈满、入栈、出栈、取栈顶元素、销毁。SLNode p=new SLNode(x,top);top=p;size+;栈非空,则Object obj=top.getData();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 队列
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内