《数据结构》必须掌握的知识点与算法
数据结构与算法基础知识总结

数据结构与算法基础知识总结1 算法算法:是指解题方案的准确而完整的描述。
算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。
算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。
特征包括:(1)可行性;(2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性;(3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义;(4)拥有足够的情报。
算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。
指令系统:一个计算机系统能执行的所有指令的集合。
基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。
算法的控制结构:顺序结构、选择结构、循环结构。
算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法。
算法复杂度:算法时间复杂度和算法空间复杂度。
算法时间复杂度是指执行算法所需要的计算工作量。
算法空间复杂度是指执行这个算法所需要的内存空间。
2 数据结构的基本基本概念数据结构研究的三个方面:(1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;(2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;(3)对各种数据结构进行的运算。
数据结构是指相互有关联的数据元素的集合。
数据的逻辑结构包含:(1)表示数据元素的信息;(2)表示各数据元素之间的前后件关系。
数据的存储结构有顺序、链接、索引等。
线性结构条件:(1)有且只有一个根结点;(2)每一个结点最多有一个前件,也最多有一个后件。
非线性结构:不满足线性结构条件的数据结构。
3 线性表及其顺序存储结构线性表由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。
在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。
数据结构重点知识点

数据结构重点知识点数据结构是计算机科学中的重要基础课程,它研究计算机数据的组织、存储、检索和操作方式。
掌握数据结构的重点知识点对于学习和理解编程语言以及设计高效算法非常重要。
本文将介绍数据结构的一些重点知识点,包括线性表、树、图和算法。
一、线性表线性表是数据结构中最简单、最基本的一种结构。
线性表中的数据元素之间存在着一对一的关系,也就是说每个元素只有一个前驱和一个后继。
常见的线性表有数组和链表。
数组是一种连续存储的线性表,它的大小是固定的,一旦定义了数组的大小,就不能再改变。
数组的访问速度是很快的,但是插入和删除元素的速度较慢。
链表是一种离散存储的线性表,它的大小可以动态改变。
链表的插入和删除元素的速度较快,但是访问元素的速度较慢。
链表分为单链表、双链表和循环链表等。
二、树树是一种非线性表结构,它由节点组成,每个节点可以有零个或多个子节点。
树具有层次关系,树的最上层称为根节点,最下层称为叶子节点。
树的一些常见术语有父节点、子节点、兄弟节点和子树等。
二叉树是一种特殊的树结构,它的每个节点最多只能有两个子节点,分别称为左子节点和右子节点。
二叉树可以是空树,也可以是只有一个根节点的树,还可以是每个节点都有左右子节点的树。
二叉搜索树是一种特殊的二叉树,它的左子节点的值都小于根节点的值,右子节点的值都大于根节点的值。
二叉搜索树可以提高搜索效率,对于有序的数据可以快速找到目标元素。
三、图图是一种非线性表结构,它由节点和边组成。
节点表示图中的元素,边表示节点之间的关系。
图可以分为有向图和无向图,有向图中的边有方向,无向图中的边没有方向。
图的存储方式有两种常见的方法,邻接矩阵和邻接表。
邻接矩阵是一个二维数组,其中的元素表示两个节点之间是否存在边。
邻接表是一种链表的数组,数组中的元素表示节点及其相邻节点的信息。
图的遍历有两种常见的方法,深度优先搜索(DFS)和广度优先搜索(BFS)。
深度优先搜索是先访问根节点,然后一直访问其子节点直到叶子节点,再回溯到上一个节点继续遍历。
数据结构与算法知识点必备

数据结构与算法知识点必备标题:数据结构与算法知识点必备引言概述:数据结构与算法是计算机科学中最基础、最重要的知识点之一。
掌握数据结构与算法的基本原理和常用技巧,对于提高编程能力、解决实际问题具有重要意义。
本文将介绍数据结构与算法的一些必备知识点,帮助读者更好地理解和应用这些知识。
一、数据结构的基本概念与分类:1.1 数据结构的定义:数据结构是指数据元素之间的关系,以及对这些关系进行操作的方法。
1.2 数据结构的分类:数据结构可以分为线性结构和非线性结构两大类。
1.3 常见的数据结构:数组、链表、栈、队列、树、图等。
二、算法的基本概念与分类:2.1 算法的定义:算法是解决问题的一系列有序步骤。
2.2 算法的分类:算法可以分为递归算法、贪心算法、动态规划算法、分治算法等。
2.3 常见的算法:排序算法(如冒泡排序、快速排序)、查找算法(如二分查找)、图算法(如最短路径算法)等。
三、数据结构与算法的应用场景:3.1 数据结构在数据库中的应用:数据库中的索引结构、B树等都是基于数据结构的设计。
3.2 算法在人工智能领域的应用:人工智能领域的深度学习算法、神经网络算法等都是基于算法的设计。
3.3 数据结构与算法在游戏开发中的应用:游戏中的碰撞检测、路径规划等都需要数据结构与算法的支持。
四、数据结构与算法的学习方法与技巧:4.1 多练习:通过大量的练习,掌握数据结构与算法的基本原理和应用技巧。
4.2 查阅资料:阅读相关的书籍、文章,了解数据结构与算法的最新发展和应用。
4.3 参加训练营:参加数据结构与算法的培训课程或训练营,加强实践能力和交流经验。
五、数据结构与算法的重要性与未来发展趋势:5.1 重要性:数据结构与算法是计算机科学的基石,掌握这些知识点对于提高编程能力、解决实际问题至关重要。
5.2 未来发展趋势:随着人工智能、大数据等领域的快速发展,数据结构与算法的应用范围将会越来越广泛,对于从业者来说,不断学习和掌握新的数据结构与算法知识至关重要。
数据结构大纲知识点

数据结构大纲知识点一、绪论。
1. 数据结构的基本概念。
- 数据、数据元素、数据项。
- 数据结构的定义(逻辑结构、存储结构、数据的运算)- 数据结构的三要素之间的关系。
2. 算法的基本概念。
- 算法的定义、特性(有穷性、确定性、可行性、输入、输出)- 算法的评价指标(时间复杂度、空间复杂度的计算方法)二、线性表。
1. 线性表的定义和基本操作。
- 线性表的逻辑结构特点(线性关系)- 线性表的基本操作(如初始化、插入、删除、查找等操作的定义)2. 顺序存储结构。
- 顺序表的定义(用数组实现线性表)- 顺序表的基本操作实现(插入、删除操作的时间复杂度分析)- 顺序表的优缺点。
3. 链式存储结构。
- 单链表的定义(结点结构,头指针、头结点的概念)- 单链表的基本操作实现(建立单链表、插入、删除、查找等操作的代码实现及时间复杂度分析)- 循环链表(与单链表的区别,操作特点)- 双向链表(结点结构,基本操作的实现及特点)三、栈和队列。
1. 栈。
- 栈的定义(后进先出的线性表)- 栈的基本操作(入栈、出栈、取栈顶元素等操作的定义)- 顺序栈的实现(存储结构,基本操作的代码实现)- 链栈的实现(与单链表的联系,基本操作的实现)- 栈的应用(表达式求值、函数调用栈等)2. 队列。
- 队列的定义(先进先出的线性表)- 队列的基本操作(入队、出队、取队头元素等操作的定义)- 顺序队列(存在的问题,如假溢出)- 循环队列的实现(存储结构,基本操作的代码实现,队空和队满的判断条件)- 链队列的实现(结点结构,基本操作的实现)- 队列的应用(如操作系统中的进程调度等)四、串。
1. 串的定义和基本操作。
- 串的概念(字符序列)- 串的基本操作(如连接、求子串、比较等操作的定义)2. 串的存储结构。
- 顺序存储结构(定长顺序存储和堆分配存储)- 链式存储结构(块链存储结构)3. 串的模式匹配算法。
- 简单的模式匹配算法(Brute - Force算法)的实现及时间复杂度分析。
数据结构与算法知识点

数据结构与算法知识点
数据结构是指组织,存储和处理数据的方式,是计算机中用于存储和管理数据的基本结构。
算法是一组有限的、按照某种特定顺序执行的指令,应对问题的最终解决方法。
数据结构与算法之间存在着很好的紧密联系,忽略任何一个都会影响计算机程序的性能。
1. 数据结构:
数据结构包括数组、线性表、栈、队列、字符串、散列表、图、树等。
树是一类特殊的数据结构,它是由节点和边组成的,可以用于解决复杂问题,比如后缀树、平衡树和三叉树等。
图是一类由点和边组成的数据结构,可以用来求解最小环路来表示节点的关系,最常用的图有有向图和无向图。
2.算法:
排序算法:排序算法是最基础的算法,主要有冒泡排序、快速排序、插入排序和归并排序。
搜索算法:搜索算法是指用来查找某个结果的算法,最常用的搜索算法包括顺序搜索和二分搜索等。
图算法:图算法用于处理和操作图,最常用的图算法有最小生成树算法、最短路径算法和连通分量算法等。
动态规划:动态规划是一类蚁穴算法,用于求解不同的最优解,其中包括最长公共子序列、最小编辑距离和背包问题等。
数据结构与算法知识点学习需要正确掌握,注重实践,以便能够灵活地运用解决现实问题。
与数据结构有关的概念、知识点和算法设计等,都是计算机科学学习过程中不可或缺的。
数据结构必考知识点总结

数据结构必考知识点总结在准备考试时,了解数据结构的基本概念和相关算法是非常重要的。
以下是一些数据结构的必考知识点总结:1. 基本概念数据结构的基本概念是非常重要的,包括数据、数据元素、数据项、数据对象、数据类型、抽象数据类型等的概念。
了解这些概念有助于更好地理解数据结构的本质和作用。
2. 线性表线性表是数据结构中最基本的一种,它包括顺序表和链表两种实现方式。
顺序表是将数据元素存放在一块连续的存储空间内,而链表是将数据元素存放在若干个节点中,每个节点包含数据和指向下一个节点的指针。
了解线性表的概念和基本操作是非常重要的。
3. 栈和队列栈和队列是两种特殊的线性表,它们分别具有后进先出和先进先出的特性。
栈和队列的实现方式有多种,包括数组和链表。
掌握栈和队列的基本操作和应用是数据结构的基本内容之一。
4. 树结构树是一种非线性的数据结构,它包括二叉树、多路树、二叉搜索树等多种形式。
了解树的基本定义和遍历算法是必考的知识点。
5. 图结构图是一种非线性的数据结构,它包括有向图和无向图两种形式。
了解图的基本概念和相关算法是非常重要的,包括图的存储方式、遍历算法、最短路径算法等。
6. 排序算法排序是一个非常重要的算法问题,掌握各种排序算法的原理和实现方式是必不可少的。
常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。
7. 查找算法查找是另一个重要的算法问题,包括顺序查找、二分查找、哈希查找、树查找等。
了解各种查找算法的原理和实现方式是必考的知识点之一。
8. 算法复杂度分析算法的时间复杂度和空间复杂度是评价算法性能的重要指标,掌握复杂度分析的方法和技巧是非常重要的。
9. 抽象数据类型ADT是数据结构的一种概念模型,它包括数据的定义和基本操作的描述。
了解ADT的概念和实现方式是非常重要的。
10. 动态存储管理动态存储管理是数据结构中一个重要的问题,包括内存分配、内存释放、内存回收等。
了解动态存储管理的基本原理和实现方式是必考的知识点之一。
算法与数据结构需要掌握的知识点

算法与数据结构需要掌握的知识点算法与数据结构是计算机科学中非常重要的两个领域,它们是计算机程序设计的基础。
掌握算法与数据结构的知识,对于编写高效、可靠的程序至关重要。
下面将介绍一些算法与数据结构需要掌握的知识点。
一、算法1. 算法的概念:算法是解决问题的一系列步骤或指令的有限序列。
它具有输入、输出和确定性的特点。
2. 时间复杂度和空间复杂度:算法的时间复杂度是指执行算法所需要的时间,空间复杂度是指执行算法所需要的内存空间。
3. 常见的算法设计策略:分治法、贪心算法、动态规划、回溯法等。
4. 常见的算法:排序算法(如冒泡排序、插入排序、选择排序、快速排序、归并排序等)、查找算法(如二分查找、哈希查找等)、图算法(如深度优先搜索、广度优先搜索、最短路径算法等)等。
二、数据结构1. 数据结构的概念:数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,它包括线性结构、树形结构、图形结构等。
2. 线性结构:包括数组、链表、栈、队列等。
数组是一种连续存储的线性结构,链表是一种离散存储的线性结构,栈和队列是特殊的线性结构。
3. 树形结构:包括二叉树、堆、哈夫曼树等。
二叉树是一种每个节点最多有两个子节点的树形结构,堆是一种特殊的二叉树,哈夫曼树是一种用于数据压缩的树形结构。
4. 图形结构:包括有向图和无向图。
有向图中的边有方向,无向图中的边没有方向。
5. 数据结构的存储方式:顺序存储和链式存储。
顺序存储是利用连续的存储单元存储数据,链式存储是利用指针将数据元素按照一定的逻辑关系连接起来。
三、算法与数据结构的应用1. 算法与数据结构在搜索引擎中的应用:搜索引擎需要使用数据结构来存储和索引大量的网页,使用算法来进行网页排序和相关性计算。
2. 算法与数据结构在图像处理中的应用:图像处理需要使用数据结构来表示图像,使用算法来进行图像的处理和分析。
3. 算法与数据结构在人工智能中的应用:人工智能需要使用数据结构来存储和处理大量的数据,使用算法来进行数据的分析和模型的训练。
数据结构与算法知识点必备

数据结构与算法知识点必备在计算机科学的广袤领域中,数据结构与算法犹如基石般重要。
它们不仅是解决各种复杂问题的关键工具,更是提升程序性能和效率的核心所在。
首先,我们来谈谈数据结构。
数据结构是一种组织和存储数据的方式,以便于对数据进行高效的操作和访问。
常见的数据结构包括数组、链表、栈、队列、树和图等。
数组是一种最简单的数据结构,它将元素按照顺序依次存储在连续的内存空间中。
数组的优点是访问元素的时间复杂度为 O(1),即可以在常数时间内获取任意位置的元素。
但其缺点也很明显,插入和删除元素的操作可能需要移动大量元素,时间复杂度较高。
链表则与数组不同,它的元素通过指针链接在一起,内存空间不一定连续。
链表在插入和删除元素时非常方便,只需修改指针即可,时间复杂度为 O(1)。
但访问特定位置的元素需要从头开始遍历,时间复杂度为 O(n)。
栈是一种具有特殊操作规则的数据结构,遵循“后进先出”的原则。
就像一叠盘子,最后放上去的盘子最先被拿走。
栈常用于函数调用、表达式求值等场景。
队列则是遵循“先进先出”原则的数据结构,类似于排队买票,先到的人先得到服务。
队列常用于任务调度、消息传递等。
接下来聊聊树这种数据结构。
二叉树是树结构中最常见的一种。
二叉搜索树中,左子树的节点值小于根节点,右子树的节点值大于根节点。
这使得查找、插入和删除操作的平均时间复杂度为 O(log n),效率较高。
平衡二叉树则是对二叉搜索树的优化,通过自动调整保持树的平衡,进一步提高操作效率。
图是一种更为复杂的数据结构,用于表示对象之间的关系。
图可以分为有向图和无向图。
图的遍历算法包括深度优先搜索和广度优先搜索,常用于网络路由、社交网络分析等领域。
再来说说算法。
算法是解决特定问题的一系列明确步骤。
常见的算法有排序算法、搜索算法、动态规划等。
排序算法用于将一组数据按照特定顺序排列。
冒泡排序是一种简单但效率较低的排序算法,通过反复比较相邻元素并交换位置来排序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》必须掌握的知识点与算法第一章绪论1、算法的五个重要特性(有穷性、确定性、可行性、输入、输出)2、算法设计的要求(正确性、可读性、健壮性、效率与低存储量需求)3、算法与程序的关系:(1)一个程序不一定满足有穷性。
例操作系统,只要整个系统不遭破坏,它将永远不会停止,即使没有作业需要处理,它仍处于动态等待中。
因此,操作系统不是一个算法。
(2)程序中的指令必须是机器可执行的,而算法中的指令则无此限制。
算法代表了对问题的解,而程序则是算法在计算机上的特定的实现。
(3)一个算法若用程序设计语言来描述,则它就是一个程序。
4、算法的时间复杂度的表示与计算(这个比较复杂,具体看算法本身,一般关心其循环的次数与N的关系、函数递归的计算)第二章线性表1、线性表的特点:(1)存在唯一的第一个元素;(这一点决定了图不是线性表)(2)存在唯一的最后一个元素;(3)除第一个元素外,其它均只有一个前驱(这一点决定了树不是线性表)(4)除最后一个元素外,其它均只有一个后继。
2、线性表有两种表示:顺序表示(数组)、链式表示(链表),栈、队列都是线性表,他们都可以用数组、链表来实现。
3、顺序表示的线性表(数组)地址计算方法:(1)一维数组,设DataType a[N]的首地址为A0,每一个数据(DataType类型)占m 个字节,则a[k]的地址为:Aa[k]=A0+m*k(其直接意义就是求在数据a[k]的前面有多少个元素,每个元素占m个字节)(2)多维数组,以三维数组为例,设DataType a[M][N][P]的首地址为A000,每一个数据(DataType类型)占m个字节,则在元素a[i][j][k]的前面共有元素个数为:M*N*i +N*j+k,其其地址为:Aa[i][j][k]=A000+m*(M*N*i+N*j+k);4、线性表的归并排序:设两个线性表均已经按非递减顺序排好序,现要将两者合并为一个线性表,并仍然接非递减顺序。
可见算法2.25、掌握线性表的顺序表示法定义代码,各元素的含义;6、顺序线性表的初始化过程,可见算法2.37、顺序线性表的元素的查找。
8、顺序线性表的元素的插入算法,注意其对于当原来的存储空间满了后,追加存储空间(就是每次增加若干个空间,一般为10个)的处理过程,可见算法2.49、顺序线性表的删除元素过程,可见算法2.510、顺序线性表的归并算法,可见算法2.711、链表的定义代码,各元素的含义,并能用图形象地表示出来,以利分析;12、链表中元素的查找13、链表的元素插入,算法与图解,可见算法2.914、链表的元素的删除,算法与图解,可见算法2.1015、链表的创建过程,算法与图解,注意,链表有两种(向表头生长、向表尾生长,分别用在栈、队列中),但他们的区别就是在创建时就产生了,可见算法2.1116、链表的归并算法,可见算法2.1217、建议了解所谓的静态单链表(即用数组的形式来实现链表的操作),可见算法2.1318、循环链表的定义,意义19、循环链表的构造算法(其与单链表的区别是在创建时确定的)、图解20、循环链表的插入、删除算法、图解21、双向链表的定义,意义22、双向链表的构造算法(其与单链表的区别是在创建时确定的)、图解23、双向链表的插入、删除算法、图解,可见算法2.18、2.1924、补充:在循环链表中,只设立一个表尾指针比只设立一个表头指针更方便些,为什么?第三章栈和队列1、栈的顺序表示与实现2、栈的链表表示与实现3、栈的入栈、出栈操作算法4、栈的几个经典应用(迷宫、表达式求值)5、栈与递归的实现,如Hanoi塔问题6、队列链式表示与实现7、链式队列的入队、出队操作算法8、循环队列的表示(顺序表示)和实现,特别注意其判满、判空方法、入队操作、出队操作的实现(特别重要,考得频率很大)9、补充:共享栈的方法与实现(即两个栈共享一个空间,他们采用栈顶相向,迎面增长的存储方式)10、补充:用两个栈来模拟一个队列的思路、算法11、补充:表达式(前缀、后缀、中缀)的表达互换,这个操作要求对栈在表达式求值中的应用相当熟练,并要求对后面的二叉树相当熟练12、补充:了解双端队列(只需了解)13、补充:链栈比顺序栈的优点与缺点14、补充:一系列元素依次入栈再出栈的顺序,经典题目为:有5个元素,其入栈次序为A、B、C、D、E,以下哪种出栈的顺序是不可能的?15、补充:了解用循环链表实现队列,注意在该循环链表中只有一个头指针或一个表尾指针(只需了解)16、补充:根据给出的数学公式,写出对应的递归算法,最经典的就是用递归求阶乘。
第六章树和二叉树1、几个重要的概念:树、森林、子树、根、终端结点(叶子)、非终端结点、双亲、孩子、兄弟、堂兄弟、度、深度、有序树、无序树、二叉树、k叉树、完全二叉树、满二叉树、线索二叉树;2、二叉树的5种基本形态;3、二叉树的5个重要性质:(1)在二叉树的第i层上至多有2i-1个结点(i≥1);(2)深度为k的二叉树至多有2k-1个结点,(k≥1)(3)对任何一棵二叉树T,如果其终端结点(叶子)数为n0,度为2的结点数为n2,则n0=n2+1;(4)具有n个结点的完全二叉树的深度为;(5)如果对一棵有n个结点的完全二叉树(其深度为)的结点按性层序编号(从第1层到第层,每层从左到右),则对任一结点i(1≤i≤n),有:(i)如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲Parent(i)是结点(ii)如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子LChild (i)是结点2i;(iii)如果2i+1>n,则结点i无右孩子;否则其右孩子RChild(i)是结点2i+1利用完全二叉树的上述性质,能处理大多数完全二叉树的计算题;4、二叉树的存储结构:(1)了解顺序存储结构,只做了解;(2)链式存储结构,重要,需要掌握,后面的算法都是基于此结构;5、二叉树的遍历:(1)能对任意一棵二叉树进行手动前序、中序、后序遍历;(2)能将由前序+中序、后序+中序给出的序列还原成一棵二叉树;(3)能将一个数学表达式用中序方法将其用二叉树画出来,并能写出其前缀(波兰式)、中缀、后缀(逆波兰式)表达出来;6、二叉树的遍历递归算法(注意前、中、后序三个算法只有细微的差别),可见算法6.1,而他们的非递归算法不作要求;7、建立二叉树链表的递归算法,可见算法6.4;8、线索二叉树的存储结构图;9、能用手画出任意二叉树对应的线索二叉树(中序、后序线索);10、线索二叉树的非递归遍历算法,可见算法6.5;11、理解线索二叉树的中序线索化过程算法,可见算法6.6;12、手动写出任意森林、树的深度优先、广度优先遍历顺序;13、森林、二叉树的转换过程,能用手画出即可;14、哈夫曼树的相关概念:路径长度、带权路径长度WPL、权值;15、二叉哈夫曼树的构造过程,能用手动构造,并能将构造好的树用编码表示出来;16、了解哈夫曼树的构造算法,可见算法6.12,只需要了解,无需掌握;17、记住树的记数公式:对一棵有n个结点的有棵不同的二叉树18、补充:二叉排序树、插入、删除结点的操作(在查找一章中有详述);19、补充:满二叉树、完全二叉树用数组存储方式,其元素、结点对应关系;20、补充:求二叉树的高度(深度)算法;21、补充:将二叉树中左、右孩子交换的算法;22、补充:将用数组存储的完全二叉树转换成链式结构的算法;23、补充:对用数组存储的完全二叉树进行非递归的前序、中序、后序遍历算法;24、补充:求二叉树中叶子数、度为1的、度为2的结点数算法;25、补充:对于K叉树,其结点总数为N,求出该树的最大高度、高小高度;26、补充:构造结点数为n的k叉哈夫曼树(其所有的结点要么度为0,要么度为k),注意一般都需要增加m个权为0的结点(称为虚结点),其中如果叶子结点数目不足以构成正则的k叉树(树中只有度为k或0的结点),即不满足(n-1)MOD(k-1)=0(其中MOD是取余运算),需要添加权为0的结点,添加的个数为m=k-(n-1)MOD(k-1)-1。
添加的位置应该是距离根结点的最远处。
假设n=10,k=3,则需要添加1个权为0的虚结点(其字母可以为空)。
第七章图1、图的几个重要概念:顶点、弧、弧尾、弧头、边、有向图、无向图、完全图、邻接点、入度、出度、度、路径、回路(环)、连通图、连通分量、强连通图、强连通分量、生成森林、关节点、重连通图、AOV-网、AOE-网;2、图的几种存储、表示方法:数组表示法(重要)、邻接表(最重要,应用最广)、逆邻接表(掌握)、十字链表(理解)、邻接多重表(了解),并能大致掌握他们各种方法表示的优缺点;3、图的两种遍历顺序:深度、广度优先,建议同时掌握其算法;4、图的生成树和生成森林(只需掌握手画方法);5、图的最小生成树的两种算法:普里姆(Prim)算法(实质是顶点优先)、克鲁斯卡尔(Kruskal)算法(实质是边优先),掌握他们的手动构造过程,了解算法;6、理解求关节点算法,可见算法7.10、7.11;7、了解拓扑排序;8、掌握由AOE-网得到关键路径的方法(手动),了解算法(7.13、7.14);9、掌握最短路径的手动求解过程、方法(两种:迪杰斯特拉Dijkstra、弗洛伊德Floyd),了解算法;10、补充:Prim算法、Kruskal算法、Dijkstra算法、Floyd算法的时间复杂度;11、补充:了解拓扑排序算法;12、补充:能将图的抽象定义,如有向图,<v1,v3>,<v3,v4>,<v4,v1>}画成图,也能将图用抽象定义写出;13、补充:能根据图的邻接表、逆邻接表、数组表示法表示出来的图画出,亦能根据图写出其邻接表、逆邻接表、数组表示法;14、补充:了解四色定理(Four color theorem):最先是由一位叫古德里(Francis Guthrie)的英国大学生提出来的。
德•摩尔根(Augustus De Morgan,1806~1871)1852年10月23日致哈密顿的一封信提供了有关四色定理来源的最原始的记载。
他在信中简述了自己证明四色定理的设想与感受。
四色问题的内容是:“任何一张地图只用四种颜色就能使具有共同边界的国家染上不同的颜色。
”用数学语言表示,即“将平面任意地细分为不相重叠的区域,每一个区域总可以用1,2,3,4这四个数字之一来标记,而不会使相邻的两个区域得到相同的数字。
”15、补充:了解离散数学中的欧拉图、哥尼斯堡七桥问题;16、补充:了解汉密尔顿图;第九章查找1、掌握几个重要的概念:静态查找表、动态查找表、平均查找长度、二叉排序树、平衡二叉树、平衡因子、B-树、B+树、哈希表;2、顺序表的查找算法(9.1)及其时间复杂度的性能分析;3、折半查找(二分查找)算法(9.2)及其性能分析;4、能画出任意个数元素的二分查找过程形成的判定树;5、掌握次优二叉查找树的构造过程,能用手画出,其算法只做了解要求;6、掌握索引顺序表的查找(又称分块查找)基本原理,并能分析其性能;7、能手动根据元素的顺序,构造出一棵二叉排序树;8、掌握二叉排序树的几种算法:查找算法(9.5a、9.5b)、二叉排序树的插入算法(9.6),而插入过程就是构造二叉排序树的过程;9、掌握二叉排序树的删除结点的手动过程及算法(9.7、9.8);10、掌握二叉排序树的查找性能分析过程;11、平衡二叉树的构造过程,重点在于平衡被破坏后的调整,LL型、LR型、RR型、RL 型的平衡旋转处理;12、平衡树查找的性能分析;13、B-树的查找操作,了解其算法;14、B-树的查找性能分析;15、B+树的查找操作;16、引入哈希表的目的、优点、基本原理;17、了解几种常用的哈希函数:直接定址法、数字分析法、平方取中法、折叠法、除留余数法、随机数法;18、掌握几种常用的处理冲突的方法:开放定址法(线性探测法、伪随机数序列法)、再哈希法、链地址法、公共溢出区法;19、哈希表的查找性能分析;第十章内部排序1、掌握几个重要的概念:排序、排序方法的稳定性(即关键字相同的经排序后原顺序会不会变化)、排序算法效率的稳定性(即排序算法效率会不会受待排序数据序列的影响而出现较大的变化)、内部排序、外部排序、堆2、直接插入排序的过程(手动分析一趟排序的过程、结果)、算法(10.1);3、掌握折半插入排序算法(10.2)、理解2-路插入排序、了解表插入排序;4、希尔排序过程(手动分析一趟排序的过程、结果)、算法(10.4、10.5);5、冒泡排序过程(手动分析一趟排序的过程、结果)、算法;6、快速排序过程(手动分析一趟排序的过程、结果)、原理、算法(10.6-8)7、快速排序性能分析;8、简单选择排序过程(手动分析一趟排序的过程、结果)、算法(10.9);9、堆排序过程(手动分析建初始堆过程、一趟排序的过程、结果)、原理、算法(10.10-11),堆排序原理、过程、算法非常重要,是常考点;10、2-路归并排序过程(手动分析一趟排序的过程、结果)、算法(10.2-4);11、理解基数排序的原理、过程;12、掌握各种内部排序方法的比较;13、补充:各种内部排序的应用场合(这个比较难做,需要对各种排序算法非常清楚才能做到);14、补充:冒泡排序的改进——鲨鱼排序过程、原理、算法;15、补充:插入、选择、冒泡、快速、堆排序的算法效率稳定性分析,能判断哪种算法不受初始数据的影响;16、补充:用链表实现插入排序的过程、算法;。