数据结构与算法基础知识总结
- 格式:doc
- 大小:27.50 KB
- 文档页数:4
数据结构与算法知识点必备一、数据结构概述数据结构是计算机存储、组织数据的方式,是计算机科学中的重要基础。
它关注如何将数据以及与数据相关的操作组织起来,以便高效地访问和修改数据。
常见的数据结构有:数组、链表、栈、队列、树、图等。
二、数组数组是一种线性数据结构,用于存储相同类型的数据。
它通过索引来访问元素,具有随机访问的特点。
常见的数组操作有:插入、删除、查找、排序等。
三、链表链表是一种动态数据结构,由节点组成,每一个节点包含数据和指向下一个节点的指针。
常见的链表有:单链表、双向链表、循环链表等。
链表的优点是插入和删除操作效率高,缺点是访问元素需要遍历。
四、栈栈是一种先进后出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。
栈的应用场景有:函数调用、表达式求值、括号匹配等。
五、队列队列是一种先进先出(FIFO)的数据结构,只允许在队尾插入元素,在队头删除元素。
队列的应用场景有:任务调度、缓存管理等。
六、树树是一种非线性数据结构,由节点和边组成,每一个节点可以有多个子节点。
常见的树有:二叉树、二叉搜索树、平衡二叉树、堆、哈夫曼树等。
树的应用场景有:文件系统、数据库索引、路由算法等。
七、图图是一种非线性数据结构,由节点和边组成,每一个节点可以与其他节点之间建立连接。
常见的图有:有向图、无向图、带权图等。
图的应用场景有:社交网络、地图导航、网络拓扑等。
八、算法算法是解决问题的步骤和方法。
良好的算法应具备正确性、可读性、茁壮性和高效性。
常见的算法有:排序算法、搜索算法、动态规划、贪心算法等。
九、排序算法排序算法是将一组数据按照特定顺序重新罗列的算法。
常见的排序算法有:冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。
不同排序算法的时间复杂度和空间复杂度不同,选择合适的排序算法取决于具体问题的要求。
十、搜索算法搜索算法是在给定数据集中查找特定元素的算法。
常见的搜索算法有:线性搜索、二分搜索、广度优先搜索、深度优先搜索等。
数据结构与算法知识点必备标题:数据结构与算法知识点必备引言概述:数据结构与算法是计算机科学中最基础、最重要的知识点之一。
掌握数据结构与算法的基本原理和常用技巧,对于提高编程能力、解决实际问题具有重要意义。
本文将介绍数据结构与算法的一些必备知识点,帮助读者更好地理解和应用这些知识。
一、数据结构的基本概念与分类: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. 链表链表是一种非连续的数据结构,由一系列节点组成。
每个节点包含数据和指向下一个节点的指针。
它具有以下特点:- 内存空间不连续,通过指针链接各个节点。
- 插入和删除元素的效率较高,只需修改指针指向。
- 链表的大小可以动态调整。
3. 栈栈是一种后进先出(LIFO)的数据结构,只能在一端进行插入和删除操作。
它具有以下特点:- 插入和删除元素的效率较高。
- 可以用数组或链表实现。
4. 队列队列是一种先进先出(FIFO)的数据结构,只能在一端插入元素,在另一端删除元素。
它具有以下特点:- 插入和删除元素的效率较高。
- 可以用数组或链表实现。
5. 树树是一种非线性数据结构,由节点和边组成。
每个节点可以有多个子节点,但只能有一个父节点。
树具有以下特点:- 根节点是树的顶端节点,没有父节点。
- 叶子节点是没有子节点的节点。
- 二叉树是一种特殊的树结构,每个节点最多有两个子节点。
6. 图图是一种非线性数据结构,由节点和边组成。
每个节点可以与其他节点相连,边表示节点间的关系。
图具有以下特点:- 有向图中的边有方向,无向图中的边没有方向。
- 图可以有环,表示节点间存在循环关系。
7. 哈希表哈希表是一种根据关键码值(Key)直接进行访问的数据结构。
它通过散列函数将关键码值映射到表中的位置,具有以下特点:- 查找、插入和删除元素的效率较高。
- 哈希冲突可能导致性能下降,需要解决冲突问题。
二、算法知识点1. 排序算法排序算法用于将一组元素按照特定的顺序进行排列。
常见的排序算法有以下几种:- 冒泡排序:重复比较相邻的两个元素,将较大的元素逐渐移到末尾。
- 插入排序:将未排序的元素逐个插入到已排序的部分中。
数据结构与算法总结数据结构和算法是计算机科学的重要基础知识,对于解决实际问题具有重要意义。
本文将就数据结构和算法的基本概念和常见算法进行总结。
一、数据结构数据结构是指一组数据的组织方式和存储结构,可以分为线性结构和非线性结构。
1.线性结构线性结构是指数据元素之间存在一对一的关系,包括数组、链表、栈和队列等。
-数组是一种连续存储的数据结构,访问任意元素的时间复杂度为O(1)。
-链表是一种离散存储的数据结构,通过指针将各个元素链接起来,可以实现快速插入和删除操作。
-栈是一种后进先出(LIFO)的数据结构,主要包括入栈和出栈两种操作。
-队列是一种先进先出(FIFO)的数据结构,主要包括入队和出队两种操作。
2.非线性结构非线性结构是数据元素之间存在一对多或多对多的关系,包括树、图和集合等。
-树是一种由n(n>=1)个结点组成的有限集合,其中有一个特定的称为根节点,每个结点最多有一个前驱结点和多个后继结点。
-图是一种由顶点和边组成的集合,顶点表示数据元素,边表示顶点之间的关系。
-集合是数据元素的无序集合,不存在相同元素。
二、算法算法是解决特定问题的一系列指令,可以分为基本算法和高级算法。
1.基本算法-排序算法:包括冒泡排序、插入排序、选择排序、快速排序等,可以对一组数据进行排序。
-查找算法:包括顺序查找、二分查找等,可以在一组数据中查找指定元素。
-递归算法:通过递归调用自身,可以解决一些复杂问题,如斐波那契数列、阶乘等。
2.高级算法- 图算法:包括深度优先(DFS)、广度优先(BFS)、最短路径算法(Dijkstra算法、Floyd算法)等,用于解决图相关的问题。
-动态规划算法:将一个大的问题分解为若干个子问题,通过求解子问题的最优解来得到原问题的最优解。
-贪心算法:每一步都选择当前最优解,希望最终得到全局最优解。
-回溯算法:通过枚举所有可能的解,并逐个排除不符合条件的解,用于解决组合问题、排列问题等。
数据结构与算法知识点必备一、数据结构数据结构是指数据元素之间的关系和组织方式。
掌握好数据结构对于编程和算法的理解至关重要。
以下是数据结构的一些必备知识点:1. 数组(Array):数组是一种线性数据结构,它由相同类型的元素组成,通过索引可以访问和操作元素。
了解数组的创建、访问和操作方法是基础中的基础。
2. 链表(Linked List):链表也是一种线性数据结构,它由节点组成,每一个节点包含一个数据元素和一个指向下一个节点的指针。
了解链表的插入、删除和遍历操作以及链表的类型(单链表、双链表、循环链表)是必备的。
3. 栈(Stack):栈是一种先进后出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。
了解栈的基本操作(入栈、出栈)以及栈的应用场景(如函数调用、表达式求值)是必要的。
4. 队列(Queue):队列是一种先进先出(FIFO)的数据结构,只允许在队尾插入元素,在队头删除元素。
了解队列的基本操作(入队、出队)以及队列的应用场景(如任务调度、消息传递)是必须的。
5. 树(Tree):树是一种非线性数据结构,它由节点和边组成。
了解树的基本概念(如根节点、叶子节点、父节点、子节点)以及树的遍历方式(前序、中序、后序)是必备的。
6. 图(Graph):图是一种包含节点和边的数据结构,节点之间的关系可以是任意的。
了解图的表示方法(邻接矩阵、邻接表)以及图的遍历算法(深度优先搜索、广度优先搜索)是必要的。
二、算法算法是解决问题的步骤和方法。
掌握好算法可以提高代码的效率和质量。
以下是算法的一些必备知识点:1. 排序算法:了解常见的排序算法(如冒泡排序、插入排序、选择排序、快速排序、归并排序)的原理、时间复杂度和空间复杂度是必备的。
2. 查找算法:了解常见的查找算法(如线性查找、二分查找、哈希查找)的原理、时间复杂度和适合场景是必要的。
3. 递归算法:了解递归算法的原理和应用场景,掌握递归算法的设计和实现方法是必备的。
数据结构与算法知识点总结
数据结构与算法是计算机科学的基础,它是研究如何有效地存储和处理数据的核心概念。
它们被广泛应用于计算机科学和工程领域,甚至非计算机领域,是深入研究计算机和其他信息处理系统之前必须具备的知识。
本文旨在阐述数据结构与算法的基本概念,并归纳整理出典型的基本算法结构的知识点。
首先,数据结构是一种抽象的概念,指的是组织数据的方法和技巧。
它涉及到如何以有效的方式存储、组织、表达和处理信息。
常见的数据结构包括数组、链表、树、图和哈希表等。
其次,算法是一套用于处理特定问题的指令,是对数据结构操作的具体步骤的描述。
常见的算法类型包括搜索算法、排序算法、图算法、字符串匹配算法以及动态规划算法等。
从算法的角度来看,它们可以通过比较、转换、迭代、重复等方式解决问题,以及解决问题所需的最小步数。
这些算法可以被抽象为诸如分支和界(branchandbound)、动态规划、回溯、随机化、分治法和多项式时间算法等等几大通用结构。
此外,无论是数据结构还是算法,其基本思想就是实现准确、高效、稳定的数据处理,帮助解决复杂的问题。
数据结构的基本原则就是使用最有效的数据存储结构,算法的基本原则就是使用最有效的指令组合,以实现所求解决方案。
最后,为了更好地理解数据结构与算法,基本算法思想要求熟悉并理解几大算法结构,如搜索、排序、图、动态规划、分治等。
总之,数据结构与算法是计算机科学必不可少的知识点,要想掌握它们,就必须了解基本概念,熟悉最常见的算法结构,深入理解其中的思想。
数据结构与算法知识点必备一、数据结构1. 数组数组是一种线性数据结构,它由一组连续的内存空间组成,用于存储相同类型的数据。
数组的特点包括:- 随机访问:可以通过索引直接访问数组中的元素。
- 内存连续:数组中的元素在内存中是连续存储的,这样可以提高访问效率。
- 大小固定:数组的大小在创建时就确定,无法动态改变。
2. 链表链表也是一种线性数据结构,它由一组节点组成,每一个节点包含数据和指向下一个节点的指针。
链表的特点包括:- 动态大小:链表的大小可以动态改变,可以根据需要插入或者删除节点。
- 内存不连续:链表中的节点在内存中可以是不连续的,每一个节点通过指针连接。
- 插入和删除高效:由于链表的动态性,插入和删除节点的操作比数组高效。
3. 栈栈是一种特殊的线性数据结构,它遵循先进后出(LIFO)的原则。
栈的操作包括:- 入栈(Push):将元素添加到栈的顶部。
- 出栈(Pop):从栈的顶部移除元素。
- 栈顶(Top):获取栈顶的元素。
栈常用于实现递归、表达式求值等场景。
4. 队列队列也是一种线性数据结构,它遵循先进先出(FIFO)的原则。
队列的操作包括:- 入队(Enqueue):将元素添加到队列的末尾。
- 出队(Dequeue):从队列的头部移除元素。
- 队首(Front):获取队列头部的元素。
- 队尾(Rear):获取队列末尾的元素。
队列常用于实现广度优先搜索、任务调度等场景。
5. 树树是一种非线性的数据结构,它由一组节点组成,通过边连接。
树的特点包括:- 分层结构:树由根节点、子节点和叶节点组成,子节点可以有多个。
- 递归定义:每一个子树都是一个独立的树。
- 二叉树:每一个节点最多有两个子节点的树称为二叉树。
树常用于实现搜索、排序、编译等场景。
6. 图图是一种非线性的数据结构,它由一组节点和边组成。
图的特点包括:- 顶点(Vertex):图中的节点。
- 边(Edge):连接两个顶点的线段。
- 有向图:边有方向。
数据结构与算法基础在计算机科学领域中,数据结构和算法是构建强大和高效软件系统的关键基石。
数据结构是指组织和存储数据的方式,而算法是解决问题的步骤和规则。
掌握数据结构和算法的基础知识将有助于开发出更优化、更可靠的软件应用。
一、数据结构基础1. 数组数组是一种常见的数据结构,它由一系列具有相同类型的元素组成,这些元素在内存中连续存储。
通过索引可以快速访问和修改数组中的元素。
数组的优势是快速查找,但插入和删除操作较慢。
2. 链表链表是另一种常见的数据结构,它由一系列节点组成,每个节点存储数据和指向下一个节点的指针。
链表的优势是插入和删除操作快,但查找需要遍历整个链表。
3. 栈栈是一种后进先出(LIFO)的数据结构,类似于一个弹夹。
只能在栈的顶部进行插入和删除操作。
常见的应用场景包括函数调用、表达式求值等。
4. 队列队列是一种先进先出(FIFO)的数据结构,类似于排队。
可以在队列的一端插入元素,在另一端删除元素。
常见的应用场景包括任务调度、消息传递等。
5. 树树是一种非线性的数据结构,它由节点和边组成。
树的每个节点可以有零个或多个子节点。
常见的树包括二叉树、二叉搜索树、堆等。
树在数据库、文件系统等领域有广泛的应用。
6. 图图是一种由节点和边组成的数据结构,节点之间可以有多个连接。
图可以表示复杂的关系。
常见的应用包括社交网络、路网规划等。
二、算法基础1. 排序算法排序算法是将一组数据按照一定的顺序进行排列的算法。
常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。
每种排序算法都有自己的特点和适用场景。
2. 查找算法查找算法是在数据集合中寻找特定元素的算法。
常见的查找算法有线性查找、二分查找、哈希查找等。
不同的查找算法在时间复杂度和空间复杂度上有不同的性能表现。
3. 图算法图算法用于解决图数据结构相关的问题。
常见的图算法包括广度优先搜索、深度优先搜索、最短路径算法、最小生成树算法等。
这些算法在社交网络分析、路径规划等领域有广泛的应用。
大学计算机基础超详细知识点总结第一篇:数据结构与算法基础知识总结1.数据结构1.1线性结构线性结构是指数据元素之间存在一对一的关系,即除了第一个元素和最后一个元素,其它元素都是首尾相接的。
如:数组、链表、队列、栈等。
1.2非线性结构非线性结构是指数据元素之间存在一对多或多对多的关系,常见的有树、图等。
1.3基本操作数据结构的基本操作包括:查找、插入、删除、修改、排序、统计等。
2.算法算法是指解决问题的步骤和方法。
算法的分类有很多种,这里介绍几种常见的算法分类。
2.1按照递归与非递归递归算法是指在算法过程中调用自身的算法,非递归算法是指不调用自身的算法。
2.2按照时间复杂度算法的时间复杂度是指算法执行所需的时间,通常用大O 表示法表示。
按照时间复杂度,算法可以分为多项式时间算法和指数时间算法。
2.3按照空间复杂度算法的空间复杂度是指算法执行所需的内存空间,通常用大O表示法表示。
2.4按照性质算法可以按照性质分为贪心算法、动态规划算法、回溯算法、分治算法等。
每种算法都有自己的特点和适用范围。
3.常用算法优化技巧3.1空间换时间有些算法时间复杂度高,但是可以通过空间换时间的方式来进行优化。
比如,哈希表就是一种将空间换时间的方式。
3.2并行算法并行算法是指将一个大的问题分成许多小的子问题,然后将这些子问题并行处理,最后合并得到问题的解。
并行算法可以充分利用多核CPU,提高算法的效率。
3.3分治算法分治算法是指将一个大问题分成许多小问题进行解决,最后将小问题的解合并得到大问题的解。
分治算法适用于处理大量数据的情况。
4.数据结构与算法的应用数据结构和算法在计算机科学中得到了广泛应用,比如:4.1排序算法排序算法是数据结构和算法中最基本的一类问题,常用于对数据进行排序,比如冒泡排序、快速排序、归并排序等。
4.2图像处理在图像处理中,数据结构和算法常用于图像的压缩、平滑处理和特征提取等。
4.3机器学习机器学习是一种应用广泛的领域,数据结构和算法在机器学习中扮演着重要的角色,比如分类、聚类、回归等。
数据结构与算法知识点必备一、数据结构基础知识1. 数组数组是一种线性数据结构,它由相同类型的元素组成,通过索引来访问元素。
示例:int[] arr = {1, 2, 3, 4, 5};2. 链表链表是一种非连续的数据结构,它由节点组成,每一个节点包含数据和指向下一个节点的指针。
示例:class ListNode {int val;ListNode next;ListNode(int x) { val = x; }}3. 栈栈是一种后进先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。
示例:Stack<Integer> stack = new Stack<>();4. 队列队列是一种先进先出(FIFO)的数据结构,可以在队尾插入元素,在队头删除元素。
示例:Queue<Integer> queue = new LinkedList<>();5. 树树是一种非线性的数据结构,由节点和边组成,每一个节点最多有一个父节点和多个子节点。
示例:class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }}二、常用算法1. 排序算法- 冒泡排序:比较相邻元素,将较大的元素交换到后面。
- 插入排序:将元素逐个插入到已排序序列的适当位置。
- 选择排序:每次选择最小的元素放到已排序序列的末尾。
- 快速排序:通过一趟划分将待排序序列分成两部份,递归地对两部份进行排序。
- 归并排序:将待排序序列分成两部份,递归地对两部份进行排序,然后合并两个有序序列。
2. 查找算法- 顺序查找:逐个比较待查找元素和序列中的元素。
- 二分查找:在有序序列中通过比较中间元素和待查找元素来缩小查找范围。
- 哈希查找:通过哈希函数将元素映射到哈希表的位置,快速定位元素。
3. 图算法- 广度优先搜索(BFS):从起始节点开始,逐层遍历图的节点。
数据结构与算法基础知识总结
1 算法
算法:是指解题方案的准确而完整的描述。
算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。
算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。
特征包括:
(1)可行性;
(2)确定性,算法中每一步骤都必须有明确定义,不充许有模棱两可的解释,不允许有多义性;
(3)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义;
(4)拥有足够的情报。
算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。
指令系统:一个计算机系统能执行的所有指令的集合。
基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。
算法的控制结构:顺序结构、选择结构、循环结构。
算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法。
算法复杂度:算法时间复杂度和算法空间复杂度。
算法时间复杂度是指执行算法所需要的计算工作量。
算法空间复杂度是指执行这个算法所需要的内存空间。
2 数据结构的基本基本概念
数据结构研究的三个方面:
(1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;
(2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;(3)对各种数据结构进行的运算。
数据结构是指相互有关联的数据元素的集合。
数据的逻辑结构包含:
(1)表示数据元素的信息;
(2)表示各数据元素之间的前后件关系。
数据的存储结构有顺序、链接、索引等。
线性结构条件:
(1)有且只有一个根结点;
(2)每一个结点最多有一个前件,也最多有一个后件。
非线性结构:不满足线性结构条件的数据结构。
3 线性表及其顺序存储结构
线性表由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。
在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。
非空线性表的结构特征:
(1)且只有一个根结点a1,它无前件;
(2)有且只有一个终端结点an,它无后件;
(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。
结点个数n称为线性表的长度,当n=0时,称为空表。
线性表的顺序存储结构具有以下两个基本特点:
(1)线性表中所有元素的所占的存储空间是连续的;
(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
ai的存储地址为:adr(ai)=adr(a1)+(i-1)k,,adr(a1)为第一个元素的地址,k代表每个元素占的字节数。
顺序表的运算:插入、删除。
(详见14--16页)
4 栈和队列
栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。
栈按照“先进后出”(filo)或“后进先出”(lifo)组织数据,栈具有记忆作用。
用top表示栈顶位置,用bottom表示栈底。
栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素称为退栈运算;(3)读栈顶元素是将栈顶元素赋给一个指定的变量,此时指针无变化。
队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。
rear指针指向队尾,front指针指向队头。
队列是“先进行出”(fifo)或“后进后出”(lilo)的线性表。
队列运算包括(1)入队运算:从队尾插入一个元素;(2)退队运算:从队头删除一个元素。
循环队列:s=0表示队列空,s=1且front=rear表示队列满
5 线性链表
数据结构中的每一个结点对应于一个存储单元,这种存储单元称为存储结点,简称结点。
结点由两部分组成:(1)用于存储数据元素值,称为数据域;(2)用于存放指针,称为指针域,用于指向前一个或后一个结点。
在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。
链式存储方式即可用于表示线性结构,也可用于表示非线性结构。
线性链表,head称为头指针,head=null(或0)称为空表,如果是两指针:左指针(llink)指向前件结点,右指针(rlink)指向后件结点。
线性链表的基本运算:查找、插入、删除。
6 树与二叉树
树是一种简单的非线性结构,所有元素之间具有明显的层次特性。
在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称树的根。
每一个结点可以有多个后件,称为该结点的子结点。
没有后件的结点称为叶子结点。
在树结构中,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。
树的最大层次称为树的深度。
二叉树的特点:(1)非空二叉树只有一个根结点;(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。
二叉树的基本性质:
(1)在二叉树的第k层上,最多有2k-1(k≥1)个结点;
(2)深度为m的二叉树最多有2m-1个结点;
(3)度为0的结点(即叶子结点)总是比度为2的结点多一个;
(4)具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分;(5)具有n个结点的完全二叉树的深度为[log2n]+1;
(6)设完全二叉树共有n个结点。
如果从根结点开始,按层序(每一层从左到右)用自然数1,2,….n给结点进行编号(k=1,2….n),有以下结论:
①若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为int(k/2);
②若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(也无右子结点);
③若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。
满二叉树是指除最后一层外,每一层上的所有结点有两个子结点,则k层上有2k-1个结点深度为m的满二叉树有2m-1个结点。
完全二叉树是指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。
二叉树存储结构采用链式存储结构,对于满二叉树与完全二叉树可以按层序进行顺序存储。
二叉树的遍历:
(1)前序遍历(dlr),首先访问根结点,然后遍历左子树,最后遍历右子树;
(2)中序遍历(ldr),首先遍历左子树,然后访问根结点,最后遍历右子树;
(3)后序遍历(lrd)首先遍历左子树,然后访问遍历右子树,最后访问根结点。
7 查找技术
顺序查找的使用情况:
(1)线性表为无序表;
(2)表采用链式存储结构。
二分法查找只适用于顺序存储的有序表,对于长度为n的有序线性表,最坏情况只需比较log2n次。
8 排序技术
排序是指将一个无序序列整理成按值非递减顺序排列的有序序列。
交换类排序法:(1)冒泡排序法,需要比较的次数为n(n-1)/2;(2)快速排序法。
插入类排序法:(1)简单插入排序法,最坏情况需要n(n-1)/2次比较;(2)希尔排序法,最坏情况需要o(n1.5)次比较。
选择类排序法:(1)简单选择排序法,
最坏情况需要n(n-1)/2次比较;(2)堆排序法,最坏情况需要o(nlog2n)次比较。