《数据结构(Java版)(第4版)》课程设计题 下载本文

内容发布更新时间 : 2024/11/18 2:30:05星期一 下面是文章的全部内容请认真阅读。

第10章 课程设计

10.4 课程设计选题

课程设计的目的、要求和选题详见教材10.4节,及课程设计任务书。

10.4.1 线性表

1. 多项式的表示和运算 题意详见教材2.4节。

(1) 使用排序单链表存储多项式

10-1 ?一元多项式相加,PolySinglyList多项式排序单链表类增加以下成员方法,public权限。

//多项式相加,返回this+list的多项式,不改变this和list,C(x)=A(x)+B(x)。

//算法不调用深拷贝,将this(A)和list(B)中的所有结点合并(相加)到C多项式单链表 PolySinglyList union(PolySinglyList list)

10-2 ?二元多项式相加,实现10-1题。

10-3 ?一元多项式相乘,Polynomial多项式类增加以下成员方法。

public boolean equals(Object obj) //比较两个多项式是否相等,覆盖 public Polynomial multi(Polynomial poly) //相乘,返回this*poly的多项式

10-4 ?二元多项式相乘,实现10-3题。

(2) 使用排序循环双链表存储多项式

10-5 ?一元多项式相加,声明PolyDoublyList多项式排序循环双链表类,继承排序循环双链表类,方法声明如下。Polynomial多项式类使用PolyDoublyList对象作为成员变量。

PolyDoublyList union(PolyDoublyList list) //返回相加的多项式,不调用深拷贝 10-6 ?二元多项式相加,实现10-5题。

10-7 ?一元多项式相乘,声明PolyDoublyList多项式排序循环双链表类,继承排序循环双链表类, 实现二元多项式相乘运算,方法声明如下。Polynomial多项式类使用PolyDoublyList对象作为成员变量。

Polynomial multi(Polynomial poly) //返回相乘的多项式 10-8 ?二元多项式相乘,实现10-7题。

10.4.2 栈和队列及递归算法

1. 计算表达式值

在例4.2、例4.6计算算术表达式值的基础上,增加以下功能。 ⑴ 检查表达式语法是否正确。

⑵ 使用散列映射存储运算符集合,建立从运算符到优先级的映射,快速查找指定运算符的优先级。运算

符集合包括位运算符、关系运算符、逻辑运算符、字符串连接运算符等,各运算符的优先级见附录D。

⑶ 整数表达式增加位运算功能。

⑷ 计算逻辑表达式、字符表达式、字符串表达式等,BNF定义见教材实验4-12。

- 0 -

⑸ 以浮点数作为常数,所求算术表达式值为浮点数类型。

⑹ 增加标识符作为变量,识别标识符,为变量赋值。使用散列映射存储变量集合,快速查找指定变量的值。

⑺ 采用文件保存多行表达式字符串,读取表达式,并将结果写入文件。

10-9 ??计算表达式值。改进例4.2,同时使用运算符栈和操作数栈,省略转换成后缀表达式过程;增加运算符、浮点数等功能。

10-10 ???计算表达式值,递归算法。改进例4.6,增加运算符、浮点数等功能。 10-11 ?????带变量的表达式求值,使用栈,增加运算符、浮点数等功能。 10-12 ?????带变量的表达式求值,递归算法,增加运算符、浮点数等功能。

10-13 ??给定一个初始序列,求解素数环问题(例4.3)的所有解,采用回溯法(10.3.4节)。 2. 走迷宫

迷宫题见实验4-13,指定迷宫大小、入口及出口位置和初始状态等,求解一条或多条路径,演示走迷宫过程,显示一条或多条结果路径。

10-14 ??走迷宫,使用栈。 10-15 ??走迷宫,使用队列。 10-16 ??走迷宫,递归算法。

10-17 ??走迷宫求所有路径,采用回溯法(10.3.4节)。

10-18 ??骑士游历问题(见实验题4-18)求多个解,采用回溯法(10.3.4节)。

10.4.3 矩阵和广义表

1. 稀疏矩阵的压缩存储及运算

以下各题实现深拷贝、矩阵相加(addAll()和union()见实验题5-3)、转置等矩阵运算。 (1) 稀疏矩阵三元组行的排序单/双链表

10-19 ?设LinkedMatrix矩阵类采用行的排序单链表存储(见实验题5-4)。

10-20 ??设LinkedMatrix矩阵类采用行的多项式排序单链表PolySinglyList(见2.4节)存储。 10-21 ?设LinkedMatrix矩阵类采用行的排序循环双链表存储。 10-22 ??设LinkedMatrix矩阵类采用行的多项式排序循环双链表存储。 (2) 稀疏矩阵三元组列的排序单/双链表

10-23 ?设LinkedMatrix矩阵类采用列的排序单链表存储(见实验题5-4)。

10-24 ??设LinkedMatrix矩阵类采用列的多项式排序单链表PolySinglyList(见2.4节)存储。 10-25 ?设LinkedMatrix矩阵类采用列的排序循环双链表存储。 10-26 ??设LinkedMatrix矩阵类采用列的多项式排序循环双链表存储。 (3) 稀疏矩阵三元组十字链表

以下各题实现深拷贝、矩阵相加(addAll()和union()见实验题5-3)、比较相等、转置等矩阵运算。 10-27 ???设CrossLinkedMatrix矩阵类采用十字单链表存储,见图5.13。

10-28 ????设CrossLinkedMatrix矩阵类采用十字双链表存储,改进图5.13,每个结点增加指向行列前驱的指针。

2. 广义表

10-29 ???声明以双链表示的广义表类GenList,实现广义表的遍历、插入、删除、查找原子、比较相等、复制等操作。

- 1 -

10-30 ???以广义表双链表示实现m元多项式的相加、相乘等运算。

10.4.4 二叉树和树

1. 二叉树(二叉链表存储结构)

(1) 二叉树的成员方法,递归算法

已知BinaryTree二叉树类采用二叉链表存储结构,增加以下成员方法,public权限。 ?以先根和中根序列构造二叉树,替换其中所有与pattern匹配的子树。成员方法声明如下:

//以先根和中根序列构造二叉树 BinaryTree(T prelist[], T inlist[])

void replaceAll(BinaryTree pattern, BinaryTree bitree) //替换所有与pattern匹配子树(深拷贝) 10-31 以中根和后根序列构造二叉树,替换其中所有与pattern匹配的子树。方法声明如下:

BinaryTree(T inlist[], T postlist[])

//以中根和后根序列构造二叉树

(2) 二叉树的成员方法,使用栈的非递归算法

10-32 ?以先根和中根序列构造二叉树(使用栈的非递归算法),替换其中所有与pattern匹配的子树。 10-33 ?以中根和后根序列构造二叉树(使用栈的非递归算法),替换其中所有与pattern匹配的子树。 (3) 对二叉树操作的静态方法,递归算法

10-34 ?以中根和后根序列构造二叉树,求二叉树中两结点最近的共同祖先结点。方法声明如下:

T ancestor(BinaryTree bitree, T x, T y) void diameterAll(BinaryTree bitree)

//返回x、y结点最近的共同祖先结点 //输出二叉树的所有直径及其路径长度

10-35 ?以中根和后根序列构造二叉树,求一棵二叉树的所有直径及其路径长度。方法声明如下: 10-36 ??以中根和后根序列构造一棵二叉树,以层次序列构造一棵完全二叉树,调用以下方法:

boolean isComplete(BinaryTree bitree) //判断是否为完全二叉树 (4) 对二叉树操作的静态方法,使用栈的非递归算法

(5) 表达式二叉树

表达式二叉树类ExpressionBinaryTree(见例6.3)声明以下方法。

10-37 ??? void createByPostfix(String postfix) //以后缀表达式构造表达式二叉树 10-38 ??? void inorder() //输出带括号的中缀表达式,算法必须比较运算符优先级的大小 其中,使用散列映射存储运算符集合,快速查找指定运算符的优先级,Java运算符及其优先级见附录D。(6) 二叉树的其他应用

10-39 ?存储淘汰赛的比赛信息,创建表示比赛过程的满二叉树(教材图1.2),保存比赛结果。 2. 二叉树(三叉链表存储结构)

(1) 二叉树的成员方法,不使用栈的非递归算法

10-40 ??BinaryTree(T prelist[])以标明空子树的先根序列构造二叉树(不使用栈的非递归算法),替换所有与pattern匹配的子树。

10-41 ???BinaryTree(BinaryTree bitree)深拷贝,不使用栈的非递归算法。

10-42 ???以中根和后根序列构造二叉树,printGenList()输出二叉树的广义表表示(不使用栈的非递归算法)。

(2) 对二叉树操作的静态方法,不使用栈的非递归算法

10-43 ?以中根和后根序列构造二叉树,求二叉树中两结点最近的共同祖先结点。

10-44 ?以中根和后根序列构造二叉树,求二叉树的所有直径及其路径长度(不使用栈的非递归算法) 。10-45 ????BinaryTree createByGenList(String genlist) //以广义表表示字符串构造二叉树 (3) 表达式二叉树

- 2 -