3《数据结构(JAVA版)(第4版)》课程设计题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2) 使用排序循环双链表存储多项式 10-5 一元多项式相加,声明 PolyDoublyList<T>多项式排序循环双链表类,继承排序循环双链表类, 方法声明如下。Polynomial 多项式类使用 PolyDoublyList<T>对象作为成员变量。 PolyDoublyList<T> union(PolyDoublyList<T> list) 10-6 二元多项式相加,实现 10-5 题。 10-7 //返回相加的多项式,不调用深拷贝
(1) 二叉树的成员方法,不使用栈的非递归算法 ,替换 10-40 BinaryTree(T prelist[])以标明空子树的先根序列构造二叉树(不使用栈的非递归算法) 所有与 pattern 匹配的子树。 10-41 BinaryTree(BinaryTree<T> bitree)深拷贝,不使用栈的非递归算法。 10-42 归算法) 。 (2) 对二叉树操作的静态方法,不使用栈的非递归算法 10-43 以中根和后根序列构造二叉树,求二叉树中两结点最近的共同祖先结点。 10-44 10-45 BinaryTree<String> createByGenList(String genlist)
10-52
① 指定一个文本文件,采用散列映射或树映射统计其中字符使用频率(例 8.3、例 8.5) 。 ② 指定字符集合和权值集合创建一棵 Huffman 树,获得各字符的 Huffman 编码(以多个二进制位表示) 。 ③ 压缩指定文件,计算压缩比。 ④ 解压缩文件,指定二进制位文件,采用 Huffman 编码对二进制位序列进行译码,获得原文本文件。 10-53 采用 Huffman 编码进行文件压缩,以单词为单位进行压缩,统计单词的使用频率,单词以 空格、标点符号或回车换行符分隔。要求同上。 3. 树(父母孩子兄弟链表存储)
-2-
以中根和后根序列构造二叉树,printGenList()输出二叉树的广义表表示(不使用栈的非递
以中根和后根序列构造二叉树,求二叉树的所有直径及其路径长度(不使用栈的非递归算法) 。 //以广义表表示字符串构造二叉树
(3) 表达式二叉树 10-46 createByPostfix(String postfix) 10-47 合 1. 线索二叉树 inorder()
//以后缀表达式构造表达式二叉树 //输出带括号的中缀表达式,使用散列映射存储运算符集
以下对中序线索二叉树操作的算法描述见习题解答 6.3 节。 10-48 ThreadNode<T> parent(ThreadNode<T> node) 10-49 插入根,插入左/右孩子操作,方法声明如下。 void add(T x)
10.4.2
1.
栈和队列及递归算法
计算表达式值
在例 4.2、例 4.6 计算算术表达式值的基础上,增加以下功能。 ⑴ 检查表达式语法是否正确。 ⑵ 使用散列映射存储运算符集合,建立从运算符到优先级的映射,快速查找指定运算符的优先级。运算 符集合包括位运算符、关系运算符、逻辑运算符、字符串连接运算符等,各运算符的优先级见附录 D。 ⑶ 整数表达式增加位运算功能。 ⑷ 计算逻辑表达式、字符表达式、字符串表达式等,BNF 定义见教材实验 4-12。 ⑸ 以浮点数作为常数,所求算术表达式值为浮点数类型。
10-29
等、复制等操作。
-1-
10-30
以广义表双链表示实现 m 元多项式的相加、相乘等运算。
10.4.4
1.
二叉树和树
二叉树(二叉链表存储结构)
(1) 二叉树的成员方法,递归算法 已知 BinaryTree<T>二叉树类采用二叉链表存储结构,增加以下成员方法,public 权限。 以先根和中根序列构造二叉树,替换其中所有与 pattern 匹配的子树。成员方法声明如下: BinaryTree(T prelist[], T inlist[]) 10-31 //以先根和中根序列构造二叉树 void replaceAll(BinaryTree<T> pattern, BinaryTree<T> bitree) //替换所有与 pattern 匹配子树(深拷贝) 以中根和后根序列构造二叉树,替换其中所有与 pattern 匹配的子树。方法声明如下: //以中根和后根序列构造二叉树 BinaryTree(T inlist[], T postlist[])
走迷宫,使用队列。 走迷宫,递归算法。 走迷宫求所有路径,采用回溯法(10.3.4 节) 。 骑士游历问题(见实验题 4-18)求多个解,采用回溯法(10.3.4 节) 。
10.4.3
1.
矩阵和广义表
稀疏矩阵的压缩存储及运算
以下各题实现深拷贝、矩阵相加(addAll()和 union()见实验题 5-3) 、转置等矩阵运算。 (1) 稀疏矩阵三元组行的排序单/双链表 10-19 设 LinkedMatrix 矩阵类采用行的排序单链表存储(见实验题 5-4) 。 10-20 10-21 10-22 设 LinkedMatrix 矩阵类采用行的排序循环双链表存储。
-0-
⑹ 增加标识符作为变量,识别标识符,为变量赋值。使用散列映射存储变量集合,快速查找指定变量的 值。 ⑺ 采用文件保存多行表达式字符串,读取表达式,并将结果写入文件。 10-9 计算表达式值。改进例 4.2,同时使用运算符栈和操作数栈,省略转换成后缀表达式过程;增 加运算符、浮点数等功能。 10-10 计算表达式值,递归算法。改进例 4.6,增加运算符、浮点数等功能。 10-11 带变量的表达式求值,使用栈,增加运算符、浮点数等功能。 10-12 带变量的表达式求值,递归算法,增加运算符、浮点数等功能。 10-13 2.
void remove(ThreadNode<T> p) //删除以 p 结点为根的子树 删除根,删除指定结点的右孩子结点,2 度结点用删除结点的右孩子顶替,画出算法描述图。 10-51 2. Huffman 树 采用 Huffman 编码进行文件压缩,以字符为单位进行压缩,统计字符使用频率。
//返回 node 结点的父母结点
//插入 x 作为根结点,原根作为 x 的左孩子
ThreadNode<T> add(ThreadNode<T> p, T x, boolean leftChild) //插入 x 作为 p 的左/右孩子结点 10-50 删除根,删除指定结点的左孩子结点,2 度结点用删除结点的左孩子顶替,方法声明如下。 void remove() void remove(ThreadNode<T> p, boolean leftChild) //删除根,分别用左或右孩子顶替 //删除 p 的左或右孩子,用左或右孩子顶替
第 10 章
10.4
10.4.1
1.
课程设计
课程设计选题
课程设计的目的、要求和选题详见教材 10.4 节,及课程设计任务书。
线性表
多项式的表示和运算
Байду номын сангаас
题意详见教材 2.4 节。 (1) 使用排序单链表存储多项式 10-1 一元多项式相加,PolySinglyList<T>多项式排序单链表类增加以下成员方法,public 权限。 //多项式相加,返回 this+list 的多项式,不改变 this 和 list,C(x)=A(x)+B(x)。 //算法不调用深拷贝,将 this(A)和 list(B)中的所有结点合并(相加)到 C 多项式单链表 PolySinglyList<T> union(PolySinglyList<T> list) 10-2 10-3 二元多项式相加,实现 10-1 题。 public boolean equals(Object obj) public Polynomial multi(Polynomial poly) 10-4 二元多项式相乘,实现 10-3 题。 一元多项式相乘,Polynomial 多项式类增加以下成员方法。 //比较两个多项式是否相等,覆盖 //相乘,返回 this*poly 的多项式
设 LinkedMatrix 矩阵类采用行的多项式排序单链表 PolySinglyList<Triple>(见 2.4 节)存储。 设 LinkedMatrix 矩阵类采用行的多项式排序循环双链表存储。
(2) 稀疏矩阵三元组列的排序单/双链表 10-23 设 LinkedMatrix 矩阵类采用列的排序单链表存储(见实验题 5-4) 。 10-24 10-25 10-26 设 LinkedMatrix 矩阵类采用列的排序循环双链表存储。
给定一个初始序列,求解素数环问题(例 4.3)的所有解,采用回溯法(10.3.4 节) 。
走迷宫
迷宫题见实验 4-13,指定迷宫大小、入口及出口位置和初始状态等,求解一条或多条路径,演示走迷宫 过程,显示一条或多条结果路径。 10-14 走迷宫,使用栈。 10-15 10-16 10-17 10-18
设 LinkedMatrix 矩阵类采用列的多项式排序单链表 PolySinglyList<Triple>(见 2.4 节)存储。 设 LinkedMatrix 矩阵类采用列的多项式排序循环双链表存储。
(3) 稀疏矩阵三元组十字链表 以下各题实现深拷贝、矩阵相加(addAll()和 union()见实验题 5-3) 、比较相等、转置等矩阵运算。 10-27 设 CrossLinkedMatrix 矩阵类采用十字单链表存储,见图 5.13。 10-28 2. 设 CrossLinkedMatrix 矩阵类采用十字双链表存储,改进图 5.13,每个结点增加指向行列 前驱的指针。 广义表 声明以双链表示的广义表类 GenList,实现广义表的遍历、插入、删除、查找原子、比较相
一元多项式相乘,声明 PolyDoublyList<T>多项式排序循环双链表类,继承排序循环双链表类, //返回相乘的多项式
实现二元多项式相乘运算,方法声明如下。Polynomial 多项式类使用 PolyDoublyList<T>对象作为成员变量。 Polynomial multi(Polynomial poly) 10-8 二元多项式相乘,实现 10-7 题。
(2) 二叉树的成员方法,使用栈的非递归算法 ,替换其中所有与 pattern 匹配的子树。 10-32 以先根和中根序列构造二叉树(使用栈的非递归算法) 10-33 以中根和后根序列构造二叉树(使用栈的非递归算法) ,替换其中所有与 pattern 匹配的子树。 (3) 对二叉树操作的静态方法,递归算法 10-34 以中根和后根序列构造二叉树,求二叉树中两结点最近的共同祖先结点。方法声明如下: T ancestor(BinaryTree<T> bitree, T x, T y) //返回 x、y 结点最近的共同祖先结点 10-35 以中根和后根序列构造二叉树,求一棵二叉树的所有直径及其路径长度。方法声明如下: void diameterAll(BinaryTree<T> bitree) //输出二叉树的所有直径及其路径长度 10-36 以中根和后根序列构造一棵二叉树,以层次序列构造一棵完全二叉树,调用以下方法: boolean isComplete(BinaryTree<T> bitree) (4) 对二叉树操作的静态方法,使用栈的非递归算法 (5) 表达式二叉树 表达式二叉树类 ExpressionBinaryTree(见例 6.3)声明以下方法。 10-37 void createByPostfix(String postfix) //以后缀表达式构造表达式二叉树 10-38 小 其中,使用散列映射存储运算符集合,快速查找指定运算符的优先级,Java 运算符及其优先级见附录 D。 (6) 二叉树的其他应用 10-39 存储淘汰赛的比赛信息,创建表示比赛过程的满二叉树(教材图 1.2) ,保存比赛结果。 2. 二叉树(三叉链表存储结构) void inorder() //输出带括号的中缀表达式,算法必须比较运算符优先级的大 //判断是否为完全二叉树