《数据结构Java版第4版》课程设计题.docx
- 文档编号:6487607
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:12
- 大小:197.43KB
《数据结构Java版第4版》课程设计题.docx
《《数据结构Java版第4版》课程设计题.docx》由会员分享,可在线阅读,更多相关《《数据结构Java版第4版》课程设计题.docx(12页珍藏版)》请在冰豆网上搜索。
《数据结构Java版第4版》课程设计题
第10章课程设计
10.4课程设计选题
课程设计的目的、要求和选题详见教材10.4节,及课程设计任务书。
10.4.1线性表
1.多项式的表示和运算
题意详见教材2.4节。
(1)使用排序单链表存储多项式
10-1一元多项式相加,PolySinglyList
//多项式相加,返回this+list的多项式,不改变this和list,C(x)=A(x)+B(x)。
//算法不调用深拷贝,将this(A)和list(B)中的所有结点合并(相加)到C多项式单链表PolySinglyList
10-2二元多项式相加,实现10-1题。
10-3一元多项式相乘,Polynomial多项式类增加以下成员方法。
publicbooleanequals(Objectobj)//比较两个多项式是否相等,覆盖
publicPolynomialmulti(Polynomialpoly)//相乘,返回this*poly的多项式
10-4二元多项式相乘,实现10-3题。
(2)使用排序循环双链表存储多项式
10-5一元多项式相加,声明PolyDoublyList
Polynomial多项式类使用PolyDoublyList
PolyDoublyList
10-6二元多项式相加,实现10-5题。
10-7一元多项式相乘,声明PolyDoublyList
Polynomial多项式类使用PolyDoublyList
Polynomialmulti(Polynomialpoly)//返回相乘的多项式
10-8二元多项式相乘,实现10-7题。
10.4.2栈和队列及递归算法
1.计算表达式值
在例4.2、例4.6计算算术表达式值的基础上,增加以下功能。
⑴检查表达式语法是否正确。
⑵使用散列映射存储运算符集合,建立从运算符到优先级的映射,快速查找指定运算符的优先级。
运算符集合包括位运算符、关系运算符、逻辑运算符、字符串连接运算符等,各运算符的优先级见附录D。
⑶整数表达式增加位运算功能。
BNF定义见教材实验4-12。
⑷计算逻辑表达式、字符表达式、字符串表达式等,
⑸以浮点数作为常数,所求算术表达式值为浮点数类型。
⑹增加标识符作为变量,识别标识符,为变量赋值。
使用散列映射存储变量集合,快速查找指定变量的值。
⑺采用文件保存多行表达式字符串,读取表达式,并将结果写入文件。
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
10-21设LinkedMatrix矩阵类采用行的排序循环双链表存储。
10-22设LinkedMatrix矩阵类采用行的多项式排序循环双链表存储。
(2)稀疏矩阵三元组列的排序单/双链表
10-23设LinkedMatrix矩阵类采用列的排序单链表存储(见实验题5-4)。
10-24设LinkedMatrix矩阵类采用列的多项式排序单链表PolySinglyList
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,实现广义表的遍历、插入、删除、查找原子、比较相等、复制等操作。
10-30
以广义表双链表示实现m元多项式的相加、相乘等运算。
10.4.4二叉树和树
1.二叉树(二叉链表存储结构)
(1)二叉树的成员方法,递归算法
已知BinaryTree
10-31以先根和中根序列构造二叉树,替换其中所有与pattern匹配的子树。
成员方法声明如下:
BinaryTree(Tprelist[],Tinlist[])//以先根和中根序列构造二叉树
voidreplaceAll(BinaryTree
10-32以中根和后根序列构造二叉树,替换其中所有与pattern匹配的子树。
方法声明如下:
BinaryTree(Tinlist[],Tpostlist[])//以中根和后根序列构造二叉树
(2)二叉树的成员方法,使用栈的非递归算法
10-33以先根和中根序列构造二叉树(使用栈的非递归算法),替换其中所有与pattern匹配的子树。
10-34以中根和后根序列构造二叉树(使用栈的非递归算法),替换其中所有与pattern匹配的子树。
(3)对二叉树操作的静态方法,递归算法
10-35以中根和后根序列构造二叉树,求二叉树中两结点最近的共同祖先结点。
方法声明如下:
Tancestor(BinaryTree
10-36以中根和后根序列构造二叉树,求一棵二叉树的所有直径及其路径长度。
方法声明如下:
voiddiameterAll(BinaryTree
10-37以中根和后根序列构造一棵二叉树,以层次序列构造一棵完全二叉树,调用以下方法:
booleanisComplete(BinaryTree
2.二叉树(三叉链表存储结构)
(1)二叉树的成员方法,不使用栈的非递归算法
10-41BinaryTree(Tprelist[])以标明空子树的先根序列构造二叉树(不使用栈的非递归算法),替换
所有与pattern匹配的子树。
10-42BinaryTree(BinaryTree
10-43以中根和后根序列构造二叉树,printGenList()输出二叉树的广义表表示(不使用栈的非递
归算法)。
(2)对二叉树操作的静态方法,不使用栈的非递归算法
10-44以中根和后根序列构造二叉树,求二叉树中两结点最近的共同祖先结点。
10-45以中根和后根序列构造二叉树,求二叉树的所有直径及其路径长度(不使用栈的非递归算法)
10-46BinaryTree
(3)表达式二叉树
10-47createByPostfix(Stringpostfix)//以后缀表达式构造表达式二叉树
10-48inorder()//输出带括号的中缀表达式,使用散列映射存储运算符集合
3.线索二叉树
以下对中序线索二叉树操作的算法描述见习题解答6.3节。
10-49ThreadNode
10-50插入根,插入左/右孩子操作,方法声明如下。
voidadd(Tx)//插入x作为根结点,原根作为x的左孩子
ThreadNode
voidremove()//删除根,分别用左或右孩子顶替
voidremove(ThreadNode
voidremove(ThreadNode
10-52删除根,删除指定结点的右孩子结点,2度结点用删除结点的右孩子顶替,画出算法描述图。
4.Huffman树
10-53采用Huffman编码进行文件压缩,以字符为单位进行压缩,统计字符使用频率。
1指定一个文本文件,采用散列映射或树映射统计其中字符使用频率(例8.3、例8.5)。
2指定字符集合和权值集合创建一棵Huffman树,获得各字符的Huffman编码(以多个二进制位表示)③压缩指定文件,计算压缩比。
④解压缩文件,指定二进制位文件,采用Huffman编码对二进制位序列进行译码,获得原文本文件。
10-54采用Huffman编码进行文件压缩,以单词为单位进行压缩,统计单词的使用频率,单词以空格、标点符号或回车换行符分隔。
要求同上。
5.树(父母孩子兄弟链表存储)
Tree
//替换所有与pattern匹配子树为tree
//输出树(森林)的广义表表示字符串//无序树,比较是否相等,忽略孩子结点次序//无序树,查找匹配的子树,忽略孩子结点次序//无序树,删除所有匹配的子树,忽略孩子次序
1)树的成员方法,递归算法
10-68voidreplaceAll(Tree
10-69voidprintGenList()
10-70booleanequalsIgnoreOrder(Tree
10-71TreeNode
10-72voidremoveAll(Tree
10-73voidreplaceAll(Tree
(2)树的成员方法,非递归算法
//输出树的广义表表示,使用栈的非递归算法
//返回x、y结点最近的共同祖先结点
//输出树的所有直径及其路径长度
//以横向凹入表示构造树
//返回以广义表表示genlist构造的树(森林)
//以广义表构造树,使用栈的非递归算法
10-74voidprintGenList()
(3)对树操作的静态方法,递归算法
10-75Tancestor(Tree
10-76
10-77Tree
10-78Tree
(4)对树操作的静态方法,非递归算法
10-79Tree
10.4.5图
public权限。
//返回带权图的代价(无向图每边只计算一次)//返回带权图中权值最小的边//判断是否完全图
//以顶点集合构造一个完全图//拷贝构造方法,深拷贝//拷贝构造方法,深拷贝
1.图的邻接表存储带权图类实现AdjListGraph
10-81TripleminWeightEgde()
10-82booleanisComplete()
10-83AdjListGraph
10-84AdjListGraph(AdjListGraph
10-85AdjListGraph(MatrixGraph
2.抽象图类关于图的连通性操作
//比较两个图是否相等,忽略顶点次序
//判断是否子图
//判断是否生成子图
//判断一个无向图是否为连通图//判断一个有向图是否为强连通图//判断一个无向图是否为一棵树//判断由顶点序列表示的一条路径是否为回路//判断由单链表存储的顶点序列是否是图的一条路径vi、vj之间的所有路径及其路径长度,回溯法(10.3.4节)vi出发的所有深度优先搜索的遍历路径(图7.23),回溯法
(1)实现AbstractGraph
10-86booleanequals(Objectobj)
10-87booleanisSubgraph(AbstractGraph
10-88booleanisSpanSubgraph(AbstractGraph
10-89booleanstronglyConnected()
10-90booleanstronglyConnected()
10-91booleanisTree()
10-92booleanisCyclePath(int[]vertexs)
10-93booleanisPath(SinglyList
10-94voidprintPathAll(inti,intj)//输出顶点
10-95voidprintPathAll(inti)//输出从顶点
2)实现AbstractGraph
//比较两个图是否相等,忽略顶点次序
//判断是否子图
//判断是否子图,graph图邻接矩阵存储
10-96booleanequals(Objectobj)
10-97booleanisSubgraph(AbstractGraph
10-98booleanisSubgraph(MatrixGraph
10-99booleanisSpanSubgraph(AbstractGraph
10-100booleanisSpanSubgraph(MatrixGraph
10-101booleanstronglyConnected()//判断一个无向图是否为连通图
10-102booleanstronglyConnected()//判断一个有向图是否为强连通图
10-103booleanisTree()//判断一个无向图是否为一棵树
10-104booleanisCyclePath(int[]vertexs)//判断由顶点序列表示的一条路径是否为回路
10-105booleanisPath(SinglyList
10-106voidprintPathAll(inti,intj)//输出vi、vj之间的所有路径及其路径长度,回溯法(10.3.4节)
10-107voidprintPathAll(inti)//输出从vi出发的所有深度优先搜索的遍历路径(图7.23),回溯法
3.图的邻接多重表存储
1)以邻接多重表存储带权无向图
10-108以邻接多重表存储带权无向图,实现插入、删除、遍历操作算法。
10-109voidprintPathAll(inti)//输出从顶点vi出发的所有深度优先搜索的遍历路径(图7.23)
Prim算法求图的最小生成树。
Kruskal算法求图的最小生成树。
Dijkstra算法求图的单源最短路径。
Floyd算法求图所有顶点间的最短路径。
10-110以邻接多重表存储带权无向图,采用
10-111以邻接多重表存储带权无向图,采用
10-112以邻接多重表存储带权无向图,采用
10-113以邻接多重表存储带权无向图,采用
2)以邻接多重表存储带权有向图
10-114以邻接多重表存储带权有向图,实现插入、删除、遍历操作算法。
10-115voidprintPathAll(inti)//输出从顶点vi出发的所有深度优先搜索的遍历路径(图7.23)
10-116以邻接多重表存储带权有向图,采用Dijkstra算法求图的单源最短路径。
10-117以邻接多重表存储带权有向图,采用Floyd算法求图所有顶点间的最短路径。
4.图的应用
10-118绘制一个由若干城市的航班路线构成的带权有向图(图1.3),连接两城市的边表示两地是
否开通航班,有直飞或经停,边的权值表示两地间价格。
指定两城市,给出多种航班路线方案,在何地中转,标明最短路径。
10-119绘制一个由若干货币的汇率关系构成的带权有向图,如人民币、美元、欧元、英镑、加元、澳元等,有向边表示汇率关系。
有些货币之间无法直接兑换,需要由第三方中转。
指定两种货币的若干金额,给出转换结果,由第三方中转的多种方案。
例如,将100美元转换成多少人民币;将1000人民币转换成多少土耳其里拉,需要由美元或欧元中转,标明最佳转换方案。
10-120地铁计费,题详见教材10.4节。
10-121公共交通信息综合查询,题详见教材10.4节。
10.4.6查找
1.查找设计
1)散列
10-122HashSet
等集合运算,以及读写对象文件操作。
10-123实现HashMap
(2)二叉排序树
10-124BinarySortTree
10-125booleanisSubtree(BinarySortTree
10-126voidprintASL()//输出ASL成功的计算公式(显示每层的查找次数×结点个数)及结果
10-127BinarySortTree
10-128实现TreeMap
(3)平衡二叉树
10-129声明平衡二叉树类AVL,实现平衡二叉树的插入、删除和查找等操作。
使用平衡二叉树存储互异的排序随机数序列,分析其特点、功能和查找效率。
2.查找应用
(1)提供快速查询的存储技术
10-130电话簿,按姓氏分块存储。
采用索引单链表(图8.8)结构,实现以下功能,分析算法效率。
1索引表按姓氏排序,采用排序单链表或排序循环双链表存储。
2主表按姓氏分块存储,各块按姓名排序,提供查找、插入、删除操作,可存储一人多号,采用排序单/循环双链表存储。
3提供读写对象文件操作。
10-131电话簿,按姓氏分块存储,用散列表作为索引表和主表,不排序,要求同上。
10-132电话簿,按姓氏分块存储,采用二叉排序树作为索引表和主表,要求同上题。
10-133电话簿,按树形关系分块存储,实现以下功能,分析算法效率。
①索引表是树结构,显示人物关系分类,以广义表表示一棵树。
例如:
全部(家人,同学(中学同学,大学同学,研究生同学),同事(计算机系,通信系),朋友)将该树形关系保存在指定文件中。
②主表按树形关系分块存储,提供查找、插入、删除操作,采用散列表存储。
3提供读写对象文件操作。
10-134电话簿,按树形关系分块存储,索引表采用横向凹入表示一棵树;主表采用二叉排序树存储,按姓名排序。
要求同上。
10-135学生信息的存储和管理,按班级分块存储。
声明Student学生类,包括学号、姓名、生日、班级、多门课程成绩等属性。
声明StudentManage学生信息管理类,采用索引单链表结构,按班级分块存储,实现以下功能,分析算法效率。
①索引表按班级排序,采用排序单链表或排序循环双链表存储。
②主表按班级分块存储,提供查找、插入、删除操作,采用排序单/循环双链表存储。
⑴基本操作:
包括插入、删除、修改、查找学生对象等操作。
⑵计算成绩:
计算指定学生多门课程成绩的总分、平均值和绩点。
⑶查询班级成绩:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构Java版第4版 数据结构 Java 课程设计