《数据结构(Java版)(第4版)》课程设计题
- 格式:doc
- 大小:161.50 KB
- 文档页数:8
第1章绪论1.选择题(1)C (2)B (3)C (4)D (5)B2.判断题(1)√(2)Ⅹ(3)Ⅹ(4)Ⅹ(5)√3.简答题(1)根据数据元素之间的不同逻辑关系,通常将其划分为哪几类结构?【解答】常见的四种逻辑结构有:①集合结构:数据元素间的关系是“属于同一个集合”。
②线性结构:数据元素之间存在着一对一的关系。
③树型结构:数据元素之间存在着一对多的关系。
④图型结构:数据元素之间存在着多对多的关系。
(2)请描述线性结构中数据元素与数据元素之间的关系特点?【解答】线性结构的特点是数据元素之间是一种线性关系,数据元素“一个接一个的排列”。
在线性结构中,有且仅有一个元素被称为“第一个”,除第一个元素之外其他元素均有唯一一个“前驱”;有且仅有一个元素被称为“最后一个”,除最后一个元素之外其他元素均有唯一一个“后继”。
(3)请描述树形结构中数据元素与数据元素之间的关系特点?【解答】树形存储结构,就是数据元素与元素之间存在着一对多关系的数据结构。
在树形存储结构中,树的根节点没有前驱结点,其余的每个节点有且只有一个前驱结点,除叶子结点没有后续节点外,其他节点的后续节点可以有一个或者多个。
(4)常用的存储结构有哪几种,各自的特点是什么?【解答】常见的四种存储结构有:①顺序存储:把逻辑上相邻的元素存储在物理位置相邻的存储单元中。
顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。
②链接存储:对逻辑上相邻的元素不要求不要求物理位置相邻的存储单元,元素间的逻辑关系通过附设的指针域来表示。
③索引存储:通过建立索引表存储结点信息的方法,其中索引表一般存储结点关键字和一个地点信息,可通过该地址找到结点其它信息。
④散列存储:根据结点的关键字直接计算出该结点的存储地址的方法。
(5)简述算法和程序的区别。
【解答】一个算法若用程序设计语言来描述,则它就是一个程序。
算法的含义与程序十分相似,但又有区别。
一个程序不一定满足有穷性。
第4章串1.采用顺序结构存储串,编写一个实现串通配符匹配的算法pattern______index(),其中的通配符只有“?”,它可以和任一字符匹配成功,例如,pattern______index(″? re″,″there are″)返回的结果是2。
答:本题的基础是Brute—Force模式匹配算法,只是增加了“?”的处理功能。
对应的算法如下:2.有两个串s1和s2,设计一个算法求这样一个串,该串中的字符是s1和s2中的公共字符。
答:扫描s1,对于当前字符s1.data[i],若在s2中,则将其加入到串s3中。
最后返回s3串。
对应的算法如下:3.设目标为t=’abcaabbabcabaacbacba’,模式p=’abcabaa’。
(1)计算模式P的nextval函数值。
(2)不写算法,只画出利用KMP算法进行模式匹配时的每一趟匹配过程。
答:(1)先计算next数组,在此基础上求nextval数组,如表4-1所示。
表4-1 计算next数组和nextval数组(2)采用KMP算法求子串位置的过程如下(开始时i=0,j=0):第1趟匹配:此时i=4,j=4,匹配失败,而nextval[4]=0,则i=4,j=nextval[4]=0,即:第2趟匹配:此时i=6,j=2,匹配失败,而nextval[2]=0,则i=6,j=nextval[2]=0,即:第3趟匹配:此时i=6,j=0,匹配失败,而nextval[0]=-1,则i=6,j=nextval[0]=-1。
因j=-1,执行i=i+1=7,j=j+1=0,即:第4趟匹配:此时i=14,j=7,匹配成功,返回v=i-t.1ength=14-7=7。
上机实验题4实验题1编写一个程序algo4-1.cpp,实现顺序串的各种基本运算,并在此基础上设计一个程序exp4-1.cpp完成如下功能:(1)建立串s=″abcdefghefghijklmn″和串sl=″xyz″;(2)输出串s;(3)输出串s的长度;(4)在串s的第9个字符位置插入串s1而产生串s2;(5)输出串s2;(6)删除串s第2个字符开始的5个字符而产生串s2;(7)输出串s2;(8)将串s第2个字符开始的5个字符替换成串s1而产生串s2;(9)输出串s2;(10)提取串s的第2个字符开始的10个字符而产生串s3;(11)输出串s3;(12)将串s1和串s2连接起来而产生串s4;(13)输出串s4。
数据结构(第4版)习题及实验参考答案数据结构复习资料完整版(c语言版)数据结构基础及深入及考试习题及实验参考答案见附录结论1、数据的逻辑结构是指数据元素之间的逻辑关系。
即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
2、数据的物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。
它依赖于计算机。
存储结构可分为4大类:顺序、链式、索引、散列3、抽象数据类型:由用户定义,用以表示应用问题的数据模型。
它由基本的数据类型构成,并包括一组相关的服务(或称操作)。
它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机)。
4、算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。
5、在数据结构中,从逻辑上可以把数据结构分成(C)A、动态结构和表态结构B、紧凑结构和非紧凑结构C、线性结构和非线性结构D、内部结构和外部结构6、算法的时间复杂度取决于(A)A、问题的规模B、待处理数据的初态C、问题的规模和待处理数据的初态线性表1、线性表的存储结构包括顺序存储结构和链式存储结构两种。
2、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为(E),删除一个元素需要移动的元素的个数为(A)。
A、(n-1)/2B、nC、n+1D、n-1E、n/2F、(n+1)/2G、(n-2)/23、“线性表的逻辑顺序与存储顺序总是一致的。
”这个结论是(B)A、正确的B、错误的C、不一定,与具体的结构有关4、线性表采用链式存储结构时,要求内存中可用存储单元的地址(D)A、必须是连续的B、部分地址必须是连续的C一定是不连续的D连续或不连续都可以5、带头结点的单链表为空的判定条件是(B)A、head==NULLB、head->ne某t==NULLC、head->ne某t=headD、head!=NULL6、不带头结点的单链表head为空的判定条件是(A)A、head==NULLB、head->ne某t==NULLC、head->ne某t=headD、head!=NULL7、非空的循环单链表head的尾结点P满足(C)A、p->ne某t==NULLB、p==NULLC、p->ne某t==headD、p==head8、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是(B)A、O(1)B、O(n)C、O(n2)D、O(nlog2n)数据结构(第4版)习题及实验参考答案9、在一个单链表中,若删除p所指结点的后继结点,则执行(A)A、p->ne某t=p->ne某t->ne某t;B、p=p->ne某t;p->ne某t=p->ne某t->ne某t;C、p->ne某t=p->ne某t;D、p=p->ne某t->ne某t;10、在一个单链表中,若在p所指结点之后插入所指结点,则执行(B)A、->ne某t=p;p->ne某t=;B、->ne某t=p->ne某t;p->ne某t=;C、->ne某t=p->ne某t;p=;D、p->ne某t=;->ne某t=p;11、在一个单链表中,已知q是p的前趋结点,若在q和p之间插入结点,则执行(C)A、->ne某t=p->ne某t;p->ne某t=;B、p->ne某t=->ne某t;->ne某t=p;C、q->ne某t=;->ne某t=p;D、p->ne某t=;->ne某t=q;12、在线性结构中,第一个结点没有前趋结点,其余每个结点有且只有1个前趋结点。
第6章数组和广义表一、选择题1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为()。
A.13B.33C.18D.40【答案】B【解析】对于对称矩阵,a i,j=a j,i。
为了节省存储空间,为多个相同的元素只分配一个存储空间。
对于对称矩阵,元素下表之间的对应关系为:当i>=j时,k=i(i-1)/2+j -1;当i< =j 时,k=j(j-1)/2+i-1。
其中k相当于地址空间的标号,i为行号,j为列号。
因为第一个元素存储地址为1,所以最后计算的k需要加1。
所以a85的存储位置为8*(8-1)/2+5=33。
2.设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()。
A.BA+141B.BA+180C.BA+222D.BA+225【答案】B【解析】在计算中,可以考虑按照列存放时,A[5,8]在内存的位置,比较容易计算元素的首地址。
比如A[5,8]顺序存放时,它是第7*8+5=61个元素,由于首地址为BA,所以它的存储首地址为BA+(61-1)*3=180+BA。
3.数组通常具有的两种基本操作是()。
A.查找和修改B.查找和索引C.索引和修改D.建立和删除【答案】A【解析】数组中的元素是顺序存放的,通过下标可以很好地查找数组元素,同时通过对应的指针可以修改数组元素的值,因此数组通常具有的两种基本操作是查找和修改。
根据数组的性质,数组通常具有的两种基本运算是排序和查找。
4.将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1..298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。
A.198B.195C.197【答案】B【解析】将对角矩阵a[i][j]存入b[k],三对角矩阵压缩地址计算公式如下:k=2i+j-2。
第二部分课后习题第1章绪论1.简述数据与数据元素的关系与区别。
答:凡是能被计算机存储、加工的对象统称为数据,数据是一个集合。
数据元素是数据的基本单位,是数据的个体。
数据与元素之间的关系是元素与集合之间的关系。
2.数据结构和数据类型有什么区别?答:数据结构是互相之间存在一种或多种特定关系的数据元素的集合,一般包括三个方面的内容,即数据的逻辑结构、存储结构和数据的运算。
而数据类型是一个值的集合和定义在这个集合上的一组运算的总称,如C语言中的int数据类型是由-32768~32767(16位机)的整数和+、-、*、/、%等运算符组成。
3.设3个表示算法频度的函数f、g和h分别为:f(n)=100n3+n2+1000g(n)=25n3+5000n2h(n)=n1.5+5000nlog2n求它们对应的时间复杂度。
答:f(n)=100n3+n2+1000=O(n3),g(n)=25n3+5000n2=O(n3),当n→∞时,√n>log2n,所以h(n)=n1.5+5000nlog2n=O(n1.5)。
4.用C/C++语言描述下列算法,并给出算法的时间复杂度。
(1)求一个n阶方阵的所有元素之和。
(2)对于输入的任意三个整数,将它们按从小到大的顺序输出。
(3)对于输入的任意n个整数,输出其中的最大和最小元素。
答:(1)算法如下:本算法的时间复杂度为O(n2)。
(2)算法如下:本算法的时间复杂度为O(1)。
(3)算法如下:本算法的时间复杂度为O(n)。
5.设n为正整数,给出下列各种算法关于n的时间复杂度。
(1)(2)(3)答:(1)设while循环语句执行次数为T(n),则:(2)算法中的基本运算语句是if(b[k]>b[j])k=j,其执行次数T(n)为:(3)设while循环语句执行次数为T(n),则:则6.有以下递归算法用于对数组a[i..j]的元素进行归并排序:求mergesort(a,0,n-1)的时间复杂度。
第1章绪论知识点归纳一、数据结构概述1.数据结构的定义(1)基本概念数据是描述客观事物的数和字符的集合,是计算机能操作的对象的总称,也是计算机处理信息的某种特定的符号表示形式。
(2)相关术语① 数据元素数据元素又称元素、节点、顶点、记录等。
数据元素是数据的基本单位。
有时候,一个数据元素可以由若干个数据项组成。
② 数据项数据项又称字段或域,它是具有独立含义的最小数据单位。
③ 数据对象数据对象是性质相同的数据元素的集合,它是数据的子集。
(3)数据结构的内容① 数据元素之间的逻辑关系,即数据的逻辑结构,它是数据结构在用户面前呈现的形式。
② 数据元素及其关系在计算机存储器中的存储方式,即数据的存储结构,又称数据的物理结构。
③ 施加在数据上的操作,即数据的运算。
(4)逻辑结构数据的逻辑结构是从逻辑关系(主要是指数据元素的相邻关系)上描述数据的,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
(5)存储结构数据的存储结构是逻辑结构用计算机语言的实现或在计算机中的表示(又称映像),也就是逻辑结构在计算机中的存储方式,它是依赖于计算机语言的。
一般只在高级语言(例如C/C++语言)的层次上讨论存储结构。
数据的运算最终需在对应的存储结构上用算法实现。
总之,数据结构是一门讨论“描述现实世界实体的数学模型(通常为非数值计算)及其之上的运算在计算机中如何表示和实现”的学科。
(6)数据结构的表示对于一种数据结构,其逻辑结构总是惟一的,但它可能对应多种存储结构,并且在不同的存储结构中,同一运算的实现过程可能不同。
描述数据结构通常采用二元组表示:B=(D,R)其中,B是一种数据结构,它由数据元素的集合D和D上二元关系的集合R组成,即:D={d i | 1≤i≤n,n≥0}R={r j | 1≤j≤m,m≥0}其中d i表示集合D中的第i个数据元素(或节点),n为D中数据元素的个数,特别地,若n=0,则D 是一个空集。
Java程序设计实用教程(第4版)习题解答与实验指导叶核亚编著2013年11月目录“Java程序设计”课程教学要求 (1)第1章Java概述 (3)第2章Java语言基础 (5)第3章类的封装、继承和多态 (22)第4章接口、内部类和Java API基础 (37)第5章异常处理 (42)第6章图形用户界面 (44)第7章多线程 (49)第8章输入/输出流和文件操作 (51)“Java程序设计”课程教学要求1. 课程性质、目的和任务程序设计是高等学校计算机学科及电子信息学科各专业本科的核心专业基础课程,是培养学生软件设计能力的重要课程。
在计算机学科的本科教学中,起着非常重要的作用。
“Java程序设计”是计算机科学与技术专业本科的专业基础限选课,开设本课程的目的是:进行程序设计和面向对象方法的基础训练;使用Java编程技术,设计解决操作系统、网络通信、数据库等多种实际问题的应用程序。
本课程通过全面、系统地介绍Java语言的基础知识、运行机制、多种编程方法和技术,使学生理解和掌握面向对象的程序设计方法,理解和掌握网络程序的特点和设计方法,建立起牢固扎实的理论基础,培养综合应用程序的设计能力。
本课程的先修课程包括:C/C++程序设计I、C/C++程序设计II、数据结构、操作系统、计算机网络、数据库原理等。
2. 教学基本要求本课程的基本要求如下。
①了解Java语言特点,理解Java Application应用程序的运行原理和方法。
掌握在JDK 环境中编译和运行程序的操作,熟悉在MyEclipse集成开发环境中,编辑、编译、运行和调试程序的操作。
②掌握Java语言中语句、数组、引用类型等基本语法成分的使用方法,通过类、接口、内嵌类型、包、异常处理等机制表达和实现面向对象程序设计思想。
③掌握Java的多种实用技术,包括图形用户界面、多线程、文件操作和流、使用URL 和Socket进行网络通信等。
④熟悉Java JDBC数据库应用的设计方法。
算法与数据结构考研试题精析第4版摘要:一、算法与数据结构的重要性- 算法与数据结构在计算机科学中的地位- 考研对算法与数据结构的要求二、算法与数据结构考研试题精析第4版概述- 书籍简介- 主要内容- 适用人群三、算法与数据结构考研试题精析第4版特点- 试题收集全面- 答案解析详细- 实例丰富四、算法与数据结构考研试题精析第4版使用建议- 如何利用本书进行复习- 注意事项正文:算法与数据结构是计算机科学的基础知识,也是考研的重要内容。
在计算机科学中,算法与数据结构占据着举足轻重的地位,它们是解决各种实际问题的基础。
因此,对于想要参加计算机科学相关专业考研的学生来说,掌握算法与数据结构是必不可少的。
在这样的背景下,《算法与数据结构考研试题精析第4版》应运而生。
这本书收集了大量的考研试题,并对其进行了详细解析,旨在帮助学生更好地掌握算法与数据结构的知识。
本书的主要内容包括各种数据结构(如栈、队列、链表、树、图等)的定义、性质、操作及应用,以及各种算法(如排序、查找、动态规划、贪心算法等)的原理、步骤及应用。
书中还提供了丰富的实例,帮助读者加深理解。
本书适用于参加计算机科学相关专业考研的学生。
通过学习本书,学生可以系统地掌握算法与数据结构的知识,并在考试中取得好成绩。
本书的一个显著特点是试题收集全面。
书中收录了国家统考、985和211重点高校以及科研院所的考研试题,总数超过350套。
此外,本书的答案解析也非常详细,每个试题都提供了详细的解答过程,帮助学生理解和学习。
在使用本书进行复习时,建议学生先通过目录了解本书的主要内容,然后根据自己的需求选择相应的试题进行练习。
在练习过程中,学生应该注重理解算法的原理和数据结构的性质,并学会运用它们解决实际问题。
同时,学生还可以通过本书的实例加深对知识点的理解。
1章答案1.简述数据与数据元素的关系与区别。
解:凡是能被计算机存储、加工的对象统称为数据,数据是一个集合。
数据元素是数据的基本单位,是数据的个体。
数据与元素之间的关系是元素与集合之间的关系。
2.数据结构和数据类型有什么区别?解:数据结构是互相之间存在一种或多种特定关系的数据元素的集合,一般包括三个方面的内容,即数据的逻辑结构、存储结构和数据的运算。
而数据类型是一个值的集合和定义在这个集合上的一组运算的总称,如C语言中的int数据类型是由-32768~32767(16位机)的整数和+、-、*、/、%等运算符组成。
3.设3个表示算法频度的函数f、g和h分别为:f(n)=100n3+n2+1000 g(n)=25n3+5000n2 h(n)=n1.5+5000nlog2n求它们对应的时间复杂度。
解:f(n)=100n3+n2+1000=O(n3),g(n)=25n3+5000n2=O(n3),当n→∞时,√n>log2n,所以h(n)=n1.5+5000nlog2n= O(n1.5)。
4.用C/C++语言描述下列算法,并给出算法的时间复杂度。
(1)求一个n阶方阵的所有元素之和。
(2)对于输入的任意三个整数,将它们按从小到大的顺序输出。
(3)对于输入的任意n个整数,输出其中的最大和最小元素。
解:(1)算法如下:本算法的时间复杂度为O(n2)。
(2)算法如下:本算法的时间复杂度为O(1)。
(3)算法如下:本算法的时间复杂度为O(n)。
5.设n为正整数,给出下列各种算法关于n的时间复杂度。
(1)(2)(3)解:(1)设while循环语句执行次数为T(n),则:(2)算法中的基本运算语句是if(b[k]>b[j])k=j,其执行次数T(n)为:(3)设while循环语句执行次数为T(n),则:则6.有以下递归算法用于对数组a[i..j]的元素进行归并排序:求mergesort(a,0,n-1)的时间复杂度。
《数据结构》课程实验指导《数据结构》实验教学大纲课程代码:0806523006 开课学期:3 开课专业:信息管理与信息系统总学时/实验学时:64/16 总学分/实验学分:3.5/0.5一、课程简介数据结构是计算机各专业的重要技术基础课。
在计算机科学中,数据结构不仅是一般程序设计的基础,而且是编译原理、操作系统、数据库系统及其它系统程序和大型应用程序开发的重要基础。
数据结构课程主要讨论各种主要数据结构的特点、计算机内的表示方法、处理数据的算法以及对算法性能的分析。
通过对本课程的系统学习使学生掌握各种数据结构的特点、存储表示、运算的原理和方法,学会从问题入手,分析研究计算机加工的数据结构的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储机构及其相应的操作算法,并初步掌握时间和空间分析技术。
另一方面,本课程的学习过程也是进行复杂程序设计的训练过程,通过对本课程算法设计和上机实践的训练,还应培养学生的数据抽象能力和程序设计的能力。
二、实验的地位、作用和目的数据结构是一门实践性较强的基础课程,本课程实验主要是着眼于原理和应用的结合,通过实验,一方面能使学生学会把书上学到的知识用于解决实际问题,加强培养学生如何根据计算机所处理对象的特点来组织数据存储和编写性能好的操作算法的能力,为以后相关课程的学习和大型软件的开发打下扎实的基础。
另一方面使书上的知识变活,起到深化理解和灵活掌握教学内容的目的。
三、实验方式与基本要求实验方式是上机编写完成实验项目指定功能的程序,并调试、运行,最终得出正确结果。
具体实验要求如下:1.问题分析充分地分析和理解问题本身,弄清要求,包括功能要求、性能要求、设计要求和约束,以及基本数据特性、数据间联系等等。
2.数据结构设计针对要解决的问题,考虑各种可能的数据结构,并且力求从中选出最佳方案(必须连同算法实现一起考虑),确定主要的数据结构和全程变量。
对引入的每种数据结构和全程变量要详细说明其功用、初值和操作的特点。
第10章课程设计10.4 课程设计选题课程设计的目的、要求和选题详见教材10.4节,及课程设计任务书。
10.4.1 线性表1. 多项式的表示和运算题意详见教材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-1题。
10-3 ✩一元多项式相乘,Polynomial多项式类增加以下成员方法。
public boolean equals(Object obj) //比较两个多项式是否相等,覆盖public Polynomial multi(Polynomial poly) //相乘,返回this*poly的多项式10-4 ✩二元多项式相乘,实现10-3题。
(2)使用排序循环双链表存储多项式10-5 ✩一元多项式相加,声明PolyDoublyList<T>多项式排序循环双链表类,继承排序循环双链表类,方法声明如下。
Polynomial多项式类使用PolyDoublyList<T>对象作为成员变量。
PolyDoublyList<T> union(PolyDoublyList<T> list) //返回相加的多项式,不调用深拷贝10-6 ✩二元多项式相加,实现10-5题。
10-7 ✩一元多项式相乘,声明PolyDoublyList<T>多项式排序循环双链表类,继承排序循环双链表类,实现二元多项式相乘运算,方法声明如下。
Polynomial多项式类使用PolyDoublyList<T>对象作为成员变量。
Polynomial multi(Polynomial poly) //返回相乘的多项式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<Triple>(见2.4节)存储。
10-21 ✩设LinkedMatrix矩阵类采用行的排序循环双链表存储。
10-22 ✩✩设LinkedMatrix矩阵类采用行的多项式排序循环双链表存储。
(2)稀疏矩阵三元组列的排序单/双链表10-23 ✩设LinkedMatrix矩阵类采用列的排序单链表存储(见实验题5-4)。
10-24 ✩✩设LinkedMatrix矩阵类采用列的多项式排序单链表PolySinglyList<Triple>(见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,实现广义表的遍历、插入、删除、查找原子、比较相等、复制等操作。
10-30 ✩✩✩以广义表双链表示实现m元多项式的相加、相乘等运算。
10.4.4 二叉树和树1. 二叉树(二叉链表存储结构)(1)二叉树的成员方法,递归算法已知BinaryTree<T>二叉树类采用二叉链表存储结构,增加以下成员方法,public权限。
10-31 ✩以先根和中根序列构造二叉树,替换其中所有与pattern匹配的子树。
成员方法声明如下:BinaryTree(T prelist[], T inlist[]) //以先根和中根序列构造二叉树void replaceAll(BinaryTree<T> pattern, BinaryTree<T> bitree) //替换所有与pattern匹配子树(深拷贝)10-32 以中根和后根序列构造二叉树,替换其中所有与pattern匹配的子树。
方法声明如下:BinaryTree(T inlist[], T postlist[]) //以中根和后根序列构造二叉树(2)二叉树的成员方法,使用栈的非递归算法10-33 ✩以先根和中根序列构造二叉树(使用栈的非递归算法),替换其中所有与pattern匹配的子树。
10-34 ✩以中根和后根序列构造二叉树(使用栈的非递归算法),替换其中所有与pattern匹配的子树。
(3)对二叉树操作的静态方法,递归算法10-35 ✩以中根和后根序列构造二叉树,求二叉树中两结点最近的共同祖先结点。
方法声明如下:T ancestor(BinaryTree<T> bitree, T x, T y) //返回x、y结点最近的共同祖先结点10-36 ✩以中根和后根序列构造二叉树,求一棵二叉树的所有直径及其路径长度。
方法声明如下:void diameterAll(BinaryTree<T> bitree) //输出二叉树的所有直径及其路径长度10-37 ✩✩以中根和后根序列构造一棵二叉树,以层次序列构造一棵完全二叉树,调用以下方法:boolean isComplete(BinaryTree<T> bitree) //判断是否为完全二叉树(4)对二叉树操作的静态方法,使用栈的非递归算法(5)表达式二叉树表达式二叉树类ExpressionBinaryTree(见例6.3)声明以下方法。
10-38 ✩✩✩ void createByPostfix(String postfix) //以后缀表达式构造表达式二叉树10-39 ✩✩✩ void inorder() //输出带括号的中缀表达式,算法必须比较运算符优先级的大小其中,使用散列映射存储运算符集合,快速查找指定运算符的优先级,Java运算符及其优先级见附录D。
(6)二叉树的其他应用10-40 ✩存储淘汰赛的比赛信息,创建表示比赛过程的满二叉树(教材图1.2),保存比赛结果。
2. 二叉树(三叉链表存储结构)(1)二叉树的成员方法,不使用栈的非递归算法10-41 ✩✩BinaryTree(T prelist[])以标明空子树的先根序列构造二叉树(不使用栈的非递归算法),替换所有与pattern匹配的子树。
10-42 ✩✩✩BinaryTree(BinaryTree<T> bitree)深拷贝,不使用栈的非递归算法。
10-43 ✩✩✩以中根和后根序列构造二叉树,printGenList()输出二叉树的广义表表示(不使用栈的非递归算法)。
(2)对二叉树操作的静态方法,不使用栈的非递归算法10-44 ✩以中根和后根序列构造二叉树,求二叉树中两结点最近的共同祖先结点。
10-45 ✩以中根和后根序列构造二叉树,求二叉树的所有直径及其路径长度(不使用栈的非递归算法)。
10-46 ✩✩✩✩BinaryTree<String> createByGenList(String genlist) //以广义表表示字符串构造二叉树(3)表达式二叉树10-47 ✩✩✩ createByPostfix(String postfix) //以后缀表达式构造表达式二叉树10-48 ✩✩✩ inorder() //输出带括号的中缀表达式,使用散列映射存储运算符集合3. 线索二叉树以下对中序线索二叉树操作的算法描述见习题解答6.3节。
10-49 ✩ ThreadNode<T> parent(ThreadNode<T> node) //返回node结点的父母结点10-50 ✩插入根,插入左/右孩子操作,方法声明如下。
void add(T x) //插入x作为根结点,原根作为x的左孩子ThreadNode<T> add(ThreadNode<T> p, T x, boolean leftChild) //插入x作为p的左/右孩子结点10-51 ✩✩删除根,删除指定结点的左孩子结点,2度结点用删除结点的左孩子顶替,方法声明如下。