第04章栈和队列(Java版)_第1页
第04章栈和队列(Java版)_第2页
第04章栈和队列(Java版)_第3页
第04章栈和队列(Java版)_第4页
第04章栈和队列(Java版)_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构(Java版)(第4版)第4章 1第第4章章 栈和队列栈和队列l4.1 栈栈l4.2 队列队列l4.3 递归递归 目的:目的:使用栈或队列求解应用问题。使用栈或队列求解应用问题。 要求:要求:栈和队列的顺序和链式存储结构实现。栈和队列的顺序和链式存储结构实现。 重点:重点:栈和队列的设计和应用。栈和队列的设计和应用。 难点:难点:栈或队列的使用场合,以及如何使用栈或队列的使用场合,以及如何使用 栈和队列求解应用问题。栈和队列求解应用问题。数据结构(Java版)(第4版)第4章 24.1 栈栈4.1.1 栈抽象数据类型栈抽象数据类型 栈栈(stack)是一种线性表)是一种线性表,插入和删

2、除操作插入和删除操作只允许在线性表的一端进行。先进后出。只允许在线性表的一端进行。先进后出。数据结构(Java版)(第4版)第4章 3图图4.1 栈(顺序栈)及其状态变化栈(顺序栈)及其状态变化 A, B, C, D 入栈入栈, 入栈入栈, 出栈出栈, 入栈入栈, 入栈入栈, 出栈出栈, 出栈出栈, 出栈出栈 【思考题思考题4-1】 入栈入栈A, B, C, D,出栈,出栈A, B, C, D、D, C, B, A?还有哪些?有哪些不可能的出栈序列?为什么?还有哪些?有哪些不可能的出栈序列?为什么?数据结构(Java版)(第4版)第4章 4栈抽象数据类型栈抽象数据类型ADT,栈接口,栈接口pu

3、blic interface Stack public abstract boolean isEmpty(); /判空判空 public abstract void push(T x); /x入栈入栈 public abstract T peek(); /返回栈顶,未出栈返回栈顶,未出栈 public abstract T pop(); /出栈,返回栈顶出栈,返回栈顶数据结构(Java版)(第4版)第4章 5习题习题4-3习习4-3 能否使用一个线性表对象作为栈,或将栈能否使用一个线性表对象作为栈,或将栈声明为继承线性表?入栈调用声明为继承线性表?入栈调用insert(0,x)函数,函数,出栈

4、调用出栈调用remove(0)函数?为什么?函数?为什么?【习题解答习题解答】都不能。都不能。 数据结构(Java版)(第4版)第4章 64.1.2 顺序栈顺序栈/顺序栈类,最终类,实现栈接口,顺序栈类,最终类,实现栈接口,T表示元素类型表示元素类型public final class SeqStack implements Stack private SeqList list; /顺序表顺序表 public SeqStack(int capacity) /构造空栈构造空栈 public SeqStack() /构造空栈构造空栈 public boolean isEmpty() /判空判空 p

5、ublic void push(T x) /x入栈入栈 public T peek() /返回栈顶(未出栈)返回栈顶(未出栈) public T pop() /出栈,返回栈顶元素出栈,返回栈顶元素数据结构(Java版)(第4版)第4章 7习题解答习题解答4-4 使用顺序表对象作使用顺序表对象作为栈成员变量的操作效率分析为栈成员变量的操作效率分析 数据结构(Java版)(第4版)第4章 84.1.3 链式栈链式栈图图4.3 链式栈的入栈和出栈操作链式栈的入栈和出栈操作 数据结构(Java版)(第4版)第4章 9链式栈类链式栈类LinkedStack /链式栈类,最终类,实现栈接口,链式栈类,最终

6、类,实现栈接口,T表示元素类型表示元素类型public final class LinkedStack implements Stack private SinglyList list; /单链表单链表 public LinkedStack() /构造空栈构造空栈 public boolean isEmpty() /判空判空 public void push(T x) /x入栈入栈 public T peek() /返回栈顶(未出栈)返回栈顶(未出栈) public T pop() /出栈,返回栈顶元素出栈,返回栈顶元素数据结构(Java版)(第4版)第4章 10习题解答习题解答4-4 使用单

7、链表对象作使用单链表对象作为栈成员变量的操作效率分析为栈成员变量的操作效率分析 数据结构(Java版)(第4版)第4章 114.1.4 栈的应用栈的应用1. 栈是嵌套调用机制的实现基础栈是嵌套调用机制的实现基础 2. 使用栈以非递归方式实现递归算法使用栈以非递归方式实现递归算法 数据结构(Java版)(第4版)第4章 12【例例4.1】 括号匹配的语法检查。括号匹配的语法检查。图图4.5 表达式中圆括号匹配的语法检查表达式中圆括号匹配的语法检查数据结构(Java版)(第4版)第4章 13【例例4.2】 使用栈计算算术表达式值使用栈计算算术表达式值中缀表达式:中缀表达式:1+2*(3-4)+5数

8、据结构(Java版)(第4版)第4章 14习题习题4-5【习题解答习题解答】ABCDEF+*G/-H+*+IJ+K*-习习4-5 中缀表达式如下,中缀表达式如下, 写出后缀表达式。写出后缀表达式。 A+B*(C-D*(E+F)/G+H)-(I+J)*K数据结构(Java版)(第4版)第4章 15(1)将中缀表达式转换为后缀表达式)将中缀表达式转换为后缀表达式数据结构(Java版)(第4版)第4章 16(2)后缀表达式求值)后缀表达式求值 数据结构(Java版)(第4版)第4章 17Expressionpublic class Expression StringBuffer toPostfix(

9、String infix) /返回将返回将infix中缀表达式转换成的后缀表达式中缀表达式转换成的后缀表达式 int toValue(StringBuffer postfix) /计算后缀表达式的值计算后缀表达式的值 【思考题思考题4-2】 数据结构(Java版)(第4版)第4章 184.2 队列队列4.2.1 队列抽象数据类型队列抽象数据类型队列队列(queue)是一种特殊的线性表,其插入和删除操)是一种特殊的线性表,其插入和删除操作分别在线性表的两端进行。先进先出。作分别在线性表的两端进行。先进先出。数据结构(Java版)(第4版)第4章 194.2.1 队列抽象数据类型队列抽象数据类型/

10、队列接口,描述队列抽象数据类型,队列接口,描述队列抽象数据类型,T表示元素类型表示元素类型public interface Queue public abstract boolean isEmpty(); /判空判空 public abstract boolean add(T x); /x入队入队 public abstract T peek(); /返回队头,没有删除返回队头,没有删除 public abstract T poll(); /出队,返回队头出队,返回队头数据结构(Java版)(第4版)第4章 20习题习题4-8习习4-8 能否使用一个线性表对象作为队列,能否使用一个线性表对象作

11、为队列, 或或将队列声明为继承线性表,入栈调用将队列声明为继承线性表,入栈调用insert(x)函数,出栈调用函数,出栈调用remove(0)函数?为函数?为什么?什么?【习题解答习题解答】都不能。都不能。数据结构(Java版)(第4版)第4章 214.2.2 顺序队列顺序队列1.顺序队列顺序队列 (1)使用顺序表,出队效率低使用顺序表,出队效率低数据结构(Java版)(第4版)第4章 22(2) 使用数组,存在假溢出使用数组,存在假溢出不移动数据元素不移动数据元素 数据结构(Java版)(第4版)第4章 232. 顺序循环队列顺序循环队列 front=(front+1) % length;r

12、ear=(rear+1) % length;数据结构(Java版)(第4版)第4章 243. 顺序循环队列类顺序循环队列类 /顺序循环队列类,最终类,实现队列接口,顺序循环队列类,最终类,实现队列接口,T元素类型元素类型public final class SeqQueue implements Queue private Object element; /数组数组 private int front, rear; /队列头尾下标队列头尾下标 public SeqQueue(int capacity)/构造空队列构造空队列 public SeqQueue() /构造空队列构造空队列 publi

13、c boolean isEmpty(); /判空判空 public boolean add(T x); /x入队入队 public T peek(); /返回队头,没有删除返回队头,没有删除 public T poll(); /出队,返回队头出队,返回队头 数据结构(Java版)(第4版)第4章 254.2.3 链式队列链式队列(1)使用单链表,入队效率低)使用单链表,入队效率低 数据结构(Java版)(第4版)第4章 26(2)单链表设计,增加尾指针)单链表设计,增加尾指针 数据结构(Java版)(第4版)第4章 27链式队列类链式队列类LinkedQueue /链式队列类,最终类,实现队列

14、接口,链式队列类,最终类,实现队列接口,T元素类型元素类型public final class LinkedQueue implements Queue private Node front, rear; /队头和队尾结点队头和队尾结点 public LinkedQueue() /构造空队列构造空队列 public boolean isEmpty(); /判空判空 public boolean add(T x); /x入队入队 public T peek(); /返回队头,没有删除返回队头,没有删除 public T poll(); /出队,返回队头出队,返回队头数据结构(Java版)(第4版

15、)第4章 284.2.4 队列的应用队列的应用【例例4.3】 求解素数环问题。求解素数环问题。数据结构(Java版)(第4版)第4章 29【例例4.3】 求解素数环问题。求解素数环问题。public class PrimeRing public PrimeRing(int max) public SortedSeqList createPrime(int max)【思考题思考题4-3】使用循环双链表存储素数集合使用循环双链表存储素数集合和素数环。和素数环。 使用栈?使用栈?数据结构(Java版)(第4版)第4章 30实验实验4-13 走迷宫走迷宫(a) 栈存储经过的点,出栈返回上一个点,栈存储

16、经过的点,出栈返回上一个点,再寻找其他路径再寻找其他路径数据结构(Java版)(第4版)第4章 31实验实验4-13 走迷宫走迷宫数据结构(Java版)(第4版)第4章 32实验实验4-14 骑士游历骑士游历数据结构(Java版)(第4版)第4章 33实验实验4-14 骑士游历骑士游历88棋盘,从棋盘,从(0,0)开开始的一次游历路径始的一次游历路径55棋盘,棋盘,一次不成功游历路径一次不成功游历路径数据结构(Java版)(第4版)第4章 344.2.5 优先队列优先队列 n优先队列优先队列(Priority Queue),队列中的每个元素都),队列中的每个元素都有一个优先级,每次出队的是具有

17、最高优先级的元有一个优先级,每次出队的是具有最高优先级的元素。素。n优先队列的存储结构。分别使用一个顺序表、排序优先队列的存储结构。分别使用一个顺序表、排序顺序表、单链表、排序单链表、循环双链表、排序顺序表、单链表、排序单链表、循环双链表、排序循环双链表作为优先队列的成员变量,分析优先队循环双链表作为优先队列的成员变量,分析优先队列的入队和出队操作的效率。列的入队和出队操作的效率。 数据结构(Java版)(第4版)第4章 35习题习题4-13 优先队列优先队列优先队列,分别使用各种线性表。优先队列,分别使用各种线性表。(E,4), (D,3), (A,1), (F,3), (B,2), (C,

18、1)习题解答习题解答数据结构(Java版)(第4版)第4章 36习题习题4-13数据结构(Java版)(第4版)第4章 37优先队列类优先队列类PriorityQueueT extends Comparable /优先队列类(升或降),最终类,实现队列接口,优先队列类(升或降),最终类,实现队列接口,T是元素类型是元素类型public final class PriorityQueueT extends Comparable implements Queue private SortedCirDoublyList list; /排序循环双链表排序循环双链表 private boolean as

19、c; /asc指定升序(指定升序(true)或降序)或降序 public PriorityQueue(boolean asc) /构造空队列构造空队列 public PriorityQueue() /构造空队列,默认升序构造空队列,默认升序 public boolean isEmpty(); /判空判空 public boolean add(T x); /x入队入队 public T peek(); /返回队头,没有删除返回队头,没有删除 public T poll(); /出队,返回队头出队,返回队头数据结构(Java版)(第4版)第4章 38【例例4.4】 进程按优先级调度管理进程按优先级

20、调度管理/进程类进程类public class Process implements Comparable private String name; /进程名进程名 private int priority; /优先级优先级 public Process(String name, int priority) public Process(String name) public String toString() public int compareTo(Process p)数据结构(Java版)(第4版)第4章 391. 递归定义递归定义2. 递归算法递归算法 f(n)=nf(n-1)【思考题

21、思考题4-4】public static int factorial(int n) /求求阶乘阶乘n!,递归方法,递归方法 4.3 递归递归10,1!(1)! 2nnnnn数据结构(Java版)(第4版)第4章 40【思考题思考题4-4】求阶乘求阶乘n!public static int factorial(int n) /递归方法递归方法 if (n0) /抛出无效参数异常抛出无效参数异常 throw new IllegalArgumentException(n=+n); if (n=0 | n=1) /边界条件,递归结束条件边界条件,递归结束条件 return 1; return n*fa

22、ctorial(n-1); /递归调用,递推通式递归调用,递推通式数据结构(Java版)(第4版)第4章 41【例例4.5】 求求Fibonacci序列。序列。0,1( )(1)(2) 2nnf nf nf nn数据结构(Java版)(第4版)第4章 42打印数字塔打印数字塔 public static void line(int i) if (i10) line(i+1); System.out.print(String.format(%3d,i);执行执行line(1)结果?结果?输出输出10 9 8 7 6 5 4 3 2 1数据结构(Java版)(第4版)第4章 43习题解答例习题解答

23、例4.1 打印数字塔打印数字塔 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 数据结构(Java版)(第4版)第4章 44【例例4.6】计算算术表达式的值,计算算术表达式的值,递归算法。递归算法。 算术表达式算术表达式 项项项项项项项项项项项项 因子因子因子因子因子因子因子因子因子因子 因子因子%因子因子因子因子 常数常

24、数(算术表达式算术表达式)整数整数 数字数字数字数字数字数字整数整数数字数字数字数字 0123456789数据结构(Java版)(第4版)第4章 45算术表达式语法图算术表达式语法图 数据结构(Java版)(第4版)第4章 46算术表达式类算术表达式类ArithmeticExpression /算术表达式(整数、不包括位运算)算术表达式(整数、不包括位运算)public class ArithmeticExpression private String infix; /中缀算术表达式中缀算术表达式 private int index; /当前字符序号当前字符序号 public Arithmet

25、icExpression(String infix) public int intValue() /计算表达式,返回整数计算表达式,返回整数 private int term() /计算计算项项 private int factor() /计算计算因子因子 private int constant() /计算计算常数常数数据结构(Java版)(第4版)第4章 473. 单链表的递归算法单链表的递归算法 (1)遍历单链表的递归算法)遍历单链表的递归算法 public String toString() return ( + this.toString(this.head.next) + );private String toString(Node p) /递归算法递归算法 if (p=null) return ; /递归结束条件递归结束条件 String str=p.data.toString(); if (p.next!=null) str+=, ; return str+toString(p.next); /递归调用递归调用数据结构(Java版)(第4版)第4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论