数据结构、算法与应用 第10章
- 格式:pdf
- 大小:276.25 KB
- 文档页数:69
第1章绪论1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。
解:数据是对客观事物的符号表示。
在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据对象是性质相同的数据元素的集合,是数据的一个子集。
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
存储结构是数据结构在计算机中的表示。
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。
是对一般数据类型的扩展。
1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。
解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。
一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。
抽象数据类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。
在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。
1.3 设有数据结构(D,R),其中,,试按图论中图的画法惯例画出其逻辑结构图。
解:1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。
解:ADT Complex{数据对象:D={r,i|r,i为实数}数据关系:R={<r,i>}基本操作:InitComplex(&C,re,im)操作结果:构造一个复数C,其实部和虚部分别为re和imDestroyCmoplex(&C)操作结果:销毁复数CGet(C,k,&e)操作结果:用e返回复数C的第k元的值Put(&C,k,e)操作结果:改变复数C的第k元的值为eIsAscending(C)操作结果:如果复数C的两个元素按升序排列,则返回1,否则返回0IsDescending(C)操作结果:如果复数C的两个元素按降序排列,则返回1,否则返回0Max(C,&e)操作结果:用e返回复数C的两个元素中值较大的一个Min(C,&e)操作结果:用e返回复数C的两个元素中值较小的一个}ADT ComplexADT RationalNumber{数据对象:D={s,m|s,m为自然数,且m不为0}数据关系:R={<s,m>}基本操作:InitRationalNumber(&R,s,m)操作结果:构造一个有理数R,其分子和分母分别为s和mDestroyRationalNumber(&R)操作结果:销毁有理数RGet(R,k,&e)操作结果:用e返回有理数R的第k元的值Put(&R,k,e)操作结果:改变有理数R的第k元的值为eIsAscending(R)操作结果:若有理数R的两个元素按升序排列,则返回1,否则返回0IsDescending(R)操作结果:若有理数R的两个元素按降序排列,则返回1,否则返回0Max(R,&e)操作结果:用e返回有理数R的两个元素中值较大的一个Min(R,&e)操作结果:用e返回有理数R的两个元素中值较小的一个}ADT RationalNumber1.5 试画出与下列程序段等价的框图。
第10章排序(参考答案)部分答案解释如下:18. 对于后三种排序方法两趟排序后,序列的首部或尾部的两个元素应是有序的两个极值,而给定的序列并不满足。
20. 本题为步长为3的一趟希尔排序。
24.枢轴是73。
49. 小根堆中,关键字最大的记录只能在叶结点上,故不可能在小于等于n/2的结点上。
64. 因组与组之间已有序,故将n/k个组分别排序即可,基于比较的排序方法每组的时间下界为O(klog2k),全部时间下界为O(nlog2k)。
二、判断题5. 错误。
例如冒泡排序是稳定排序,将4,3,2,1按冒泡排序排成升序序列,第一趟变成3,2,1,4,此时3就朝向最终位置的相反方向移动。
12. 错误。
堆是n个元素的序列,可以看作是完全二叉树,但相对于根并无左小右大的要求,故其既不是二叉排序树,更不会是平衡二叉树。
22. 错误。
待排序序列为正序时,简单插入排序比归并排序快。
三、填空题1. 比较,移动2.生成有序归并段(顺串),归并3.希尔排序、简单选择排序、快速排序、堆排序等4. 冒泡,快速5. (1)简单选择排序 (2)直接插入排序(最小的元素在最后时)6. 免去查找过程中每一步都要检测整个表是否查找完毕,提高了查找效率。
7. n(n-1)/28.题中p指向无序区第一个记录,q指向最小值结点,一趟排序结束,p和q所指结点值交换,同时向后移p指针。
(1)!=null (2)p->next (3)r!=null (4)r->data<q->data(5)r->next (6)p->next9. 题中为操作方便,先增加头结点(最后删除),p指向无序区的前一记录,r指向最小值结点的前驱,一趟排序结束,无序区第一个记录与r所指结点的后继交换指针。
(1)q->link!=NULL (2)r!=p (3)p->link (4)p->link=s (5)p=p->link10.(1)i<n-i+1 (2)j<=n-i+1 (3)r[j].key<r[min].key (4)min!=i (5)max==i(6)r[max]<-->r[n-i+1]11.(1)N (2)0 (3)N-1 (4)1 (5)R[P].KEY<R[I].KEY (6)R[P].LINK(7)(N+2)(N-1)/2(8)N-1 (9)0 (10)O(1)(每个记录增加一个字段) (11)稳定(请注意I的步长为-1)12. 3,(10,7,-9,0,47,23,1,8,98,36) 13.快速14.(4,1,3,2,6,5,7)15.最好每次划分能得到两个长度相等的子文件。
第1章概论1.数据、数据元素、数据结构、数据类型的含义分别是什么?数据:对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。
数据元素:数据的基本单位,在计算机程序中通常作为一个整体考虑。
数据结构:数据元素之间的关系+运算,是以数据为成员的结构,是带结构的数据元素的集合,数据元素之间存在着一种或多种特定的关系。
数据类型:数据类型是用来区分不同的数据;由于数据在存储时所需要的容量各不相同,不同的数据就必须要分配不同大小的内存空间来存储,所有就要将数据划分成不同的数据类型。
数据类型包含取值范围和基本运算等概念。
2.什么是数据的逻辑结构?什么是数据的物理结构?数据的逻辑结构与物理结构的区别和联系是什么?逻辑结构:数据的逻辑结构定义了数据结构中数据元素之间的相互逻辑关系。
数据的逻辑结构包含下面两个方面的信息:①数据元素的信息;②各数据元素之间的关系。
物理结构:也叫储存结构,是指逻辑结构的存储表示,即数据的逻辑结构在计算机存储空间中的存放形式,包括结点的数据和结点间关系的存储表示。
数据的逻辑结构和存储结构是密不可分的,一个操作算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采与的存储结构。
采用不同的存储结构,其数据处理的效率是不同的。
因此,在进行数据处理时,针对不同问题,选择合理的逻辑结构和存储结构非常重要。
3.数据结构的主要操作包括哪些?对于各种数据结构而言,他们在基本操作上是相似的,最常用的操作有:●创建:建立一个数据结构;●清除:清除一个数据结构;●插入:在数据结构中增加新的结点;●删除:把指定的结点从数据结构中删除;●访问:对数据结构中的结点进行访问;●更新:改变指定结点的值或改变指定的某些结点之间的关系;●查找:在数据结构中查找满足一定条件的结点;●排序:对数据结构中各个结点按指定数据项的值,以升序或降序重新排列。
4.什么是抽象数据类型?如何定义抽象数据类型?抽象数据类型(Abstract Data Type 简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。
数据结构与算法应用指南第1章数据结构基础 (4)1.1 简单数据类型 (4)1.1.1 整型 (4)1.1.2 浮点型 (4)1.1.3 字符型 (4)1.1.4 布尔型 (4)1.2 复杂数据类型 (5)1.2.1 数组 (5)1.2.2 字符串 (5)1.2.3 结构体 (5)1.2.4 联合 (5)1.2.5 枚举 (5)1.3 数据结构功能分析 (5)1.3.1 时间复杂度 (5)1.3.2 空间复杂度 (6)第2章线性表 (6)2.1 顺序存储结构 (6)2.1.1 定义及特点 (6)2.1.2 顺序存储结构的实现 (6)2.1.3 顺序存储结构的优缺点 (6)2.2 链式存储结构 (6)2.2.1 定义及特点 (6)2.2.2 链式存储结构的实现 (6)2.2.3 链式存储结构的优缺点 (6)2.3 线性表的应用 (7)2.3.1 线性表的合并 (7)2.3.2 线性表的排序 (7)2.3.3 线性表的查找 (7)2.3.4 线性表的其他应用 (7)第3章栈与队列 (7)3.1 栈 (7)3.1.1 栈的定义 (7)3.1.2 栈的抽象数据类型 (7)3.1.3 栈的实现 (7)3.1.4 栈的应用示例 (7)3.2 队列 (8)3.2.1 队列的定义 (8)3.2.2 队列的抽象数据类型 (8)3.2.3 队列的实现 (8)3.2.4 循环队列 (8)3.2.5 队列的应用示例 (8)3.3.1 算术表达式求值 (8)3.3.2 括号匹配 (8)3.3.3 函数调用栈 (8)3.3.4 逆波兰表达式求值 (8)3.3.5 队列在图算法中的应用 (8)3.3.6 队列在操作系统中的应用 (8)第4章串 (8)4.1 串的定义与存储 (8)4.1.1 串的定义 (8)4.1.2 串的存储 (9)4.2 串的基本操作 (9)4.2.1 串的创建 (9)4.2.2 串的插入与删除 (9)4.2.3 串的连接 (9)4.2.4 串的截取 (9)4.2.5 串的查找 (9)4.2.6 串的替换 (9)4.3 串的模式匹配算法 (9)4.3.1 BF算法 (9)4.3.2 KMP算法 (9)4.3.3 BM算法 (10)4.3.4 Sunday算法 (10)第5章树与二叉树 (10)5.1 树的基本概念 (10)5.1.1 树的定义与性质 (10)5.1.2 树的表示方法 (10)5.1.3 树的遍历 (10)5.2 二叉树 (11)5.2.1 二叉树的定义与性质 (11)5.2.2 二叉树的存储结构 (11)5.2.3 二叉树的遍历算法 (11)5.2.4 二叉树的应用 (11)5.3 算法设计与分析 (11)5.3.1 二叉树查找算法 (11)5.3.2 二叉树插入与删除算法 (11)5.3.3 算法分析 (11)5.4 树的应用 (11)5.4.1 文件系统 (11)5.4.2 决策树 (11)5.4.3 数据库索引 (12)第6章图 (12)6.1 图的基本概念 (12)6.1.1 图的定义与术语 (12)6.1.3 图的抽象数据类型 (12)6.2 图的存储结构 (12)6.2.1 邻接矩阵 (13)6.2.2 邻接表 (13)6.2.3 边列表 (13)6.2.4 邻接多重表 (13)6.3 图的遍历算法 (13)6.3.1 深度优先搜索(DFS) (13)6.3.2 广度优先搜索(BFS) (13)6.4 图的应用 (14)6.4.1 最短路径算法 (14)6.4.2 最小树算法 (14)6.4.3 拓扑排序 (14)6.4.4 关键路径 (14)第7章排序算法 (14)7.1 内部排序算法 (14)7.1.1 冒泡排序 (14)7.1.2 选择排序 (14)7.1.3 插入排序 (14)7.1.4 快速排序 (15)7.1.5 归并排序 (15)7.1.6 希尔排序 (15)7.2 外部排序算法 (15)7.2.1 多路归并排序 (15)7.2.2 波浪排序 (15)7.2.3 聚集排序 (15)7.3 排序算法功能分析 (15)7.3.1 时间复杂度 (15)7.3.2 空间复杂度 (15)7.3.3 稳定性 (16)7.3.4 适用场景 (16)第8章查找算法 (16)8.1 顺序查找 (16)8.2 二分查找 (16)8.3 散列表查找 (16)8.4 查找算法应用 (17)第9章算法设计与分析 (17)9.1 算法设计策略 (17)9.1.1 算法设计的一般策略 (17)9.1.2 算法设计策略的选择 (18)9.2 分治算法 (18)9.2.1 分治算法的基本步骤 (18)9.2.2 分治算法的应用 (18)9.3.1 动态规划算法的基本步骤 (19)9.3.2 动态规划算法的应用 (19)9.4 贪心算法 (19)9.4.1 贪心算法的基本步骤 (19)9.4.2 贪心算法的应用 (19)第10章算法应用实例 (20)10.1 算法在数值计算中的应用 (20)10.2 算法在组合问题中的应用 (20)10.3 算法在实际问题中的应用与优化 (20)10.4 算法在人工智能领域的应用前景展望 (20)第1章数据结构基础数据结构是计算机存储、组织数据的方式,良好的数据结构可以有效地提高程序的执行效率和数据的处理速度。