数据结构
一只野狗
这个作者很懒,什么都没留下…
展开
-
数据结构_快速排序
快速排序 ( Quick Sort ) : 快速排序的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。Partition 函数要做的就是先选取当中的一个关键字,然后想尽办法将它放到一个位置,使得它左边的值都比它小,右边的值都比它大,我们将这样的关键字称为枢轴 ( pivot ) 。快速排序的时间复杂度:在最优的情况下,快速排序算法的时间复杂度为 O( nlogn)。...原创 2021-09-18 10:34:32 · 98 阅读 · 0 评论 -
数据结构_归并排序
归并排序 ( Merging Sort ) :就是利用归并的思想实现的排序方法。它的原理是假设初始序列含有 n 个记录,则可以看成是 n 个有序的子序列,每个子序列的长度为 1 ,然后两两归并,得到 [ n/2 ] ( [x] 表示不小于 x 的最小整数)个长度为 2 或 1 的有序子序列;再两两归并,……,如此重复,直至得到一个长度为 n 的有序序列为止,这种排序方法称为 2 路归并排序。归并排序时间复杂度:O( nlogn)归并排序空间复杂度:O( n + logn)...原创 2021-09-18 10:23:34 · 56 阅读 · 0 评论 -
数据结构_堆排序
堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为 大顶堆 ;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。堆排序 ( Heap Sort ) :堆排序就是利用堆(假设利用大顶堆)进行排序的方法。它的基本思想是将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根结点。将它移走(其实就是将其与堆数组的末尾元素交换,此时末尾元素就是最大值),然后将剩余的 n-1 个序列重新构造成一个堆,这样就会得到 n 个元素中的次小值。如此反复执行,便能得到一个原创 2021-09-18 10:11:46 · 42 阅读 · 0 评论 -
数据结构_希尔排序
希尔排序 ( Shell Sort ) :希尔排序是 D.L.Shell 于 1959 年提出来的一种排序算法,在这之前排序算法的时间复杂度基本都是 O( n² ) 。基本有序:所谓的基本有序就是小的关键字基本在前面,大的基本在后面,不大不小的基本在中间。...原创 2021-09-18 09:07:13 · 68 阅读 · 0 评论 -
数据结构_直接插入排序
直接插入排序 ( Straight Insertion Sort ) :直接插入算法的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录增 1 的有序表。原创 2021-09-18 08:57:26 · 86 阅读 · 0 评论 -
数据结构_简单选择排序
简单排序算法 ( Simple Selection Sort) :就是通过 n - 1 次关键字间的比较,从 n - i + 1 个记录中选出关键字最小的记录,并和第 i ( 1≤ i ≤n ) 个记录交换之。简单选择排序时间复杂度简单选择排序时间复杂度为 O ( n²) 。...原创 2021-09-14 10:31:57 · 74 阅读 · 0 评论 -
数据结构_冒泡排序
最简单排序实现冒泡排序 ( Bubble Sort ) :一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。冒泡排序算法冒泡排序优化冒泡排序复杂度分析冒泡排序的时间复杂度为 O( n²) 。...原创 2021-09-14 10:20:17 · 50 阅读 · 0 评论 -
数据结构_排序
排序的基本概念与分类排序的稳定性由于排序不仅是针对主关键字,那么对于次关键字,因为待排序的记录序列中可能存在两个或两个以上的关键字相等的记录,排序结果可能会存在不唯一的情况,我们给出了稳定与不稳定排序的定义。假设 kᵢ = kⱼ (1 ≤ i ≤ n , 1 ≤ j ≤ n , i ≠ j ) ,且在排序前的序列中 rᵢ 领先于 rⱼ 领先于 ( 即 i < j ) 。如果排序后 rᵢ 仍领先于rⱼ ,则称所用的排序方法是稳定的;反之,若可能使得排序后的序列中rⱼ 领先 rᵢ ,则称所用的排..原创 2021-09-14 10:23:43 · 49 阅读 · 0 评论 -
数据结构_散列表查找(哈希表)概述
散列表查找(哈希表)概述散列表查找定义我们可以通过查找关键字不需要比较就可获得需要的记录的存储位置。这就是一种新的存储技术——散列技术。存储位置 = f ( 关键字 )散列技术:散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系 f ,使得每个关键字 key 对应一个存储位置 f ( key ) 。查找时,根据这个确定的对应关系找到给定值 key 的映射 f ( key ) ,若查找集合中存在这个记录,则必定在 f ( key) 的位置上。这里我们把这种对应关系 f 称为..原创 2021-09-13 17:27:20 · 462 阅读 · 0 评论 -
数据结构_多路查找树(B树)
多路查找树 ( multi-way search tree) :其每一个结点的孩子数可以多余两个,且每一个结点处可以存储多个元素。2-3 树2-3 树:是这样的一棵多路查找树:其中的每一个结点都具有两个孩子(我们称它为 2 结点)或三个孩子(我们称它为 3 结点)。一个 2 结点包含一个元素和两个孩子(或没有孩子)。一个 3 结点包含一小一大两个元素和三个孩子(或没有孩子)。...原创 2021-09-10 14:59:42 · 75 阅读 · 0 评论 -
数据结构_平衡二叉树
平衡二叉树 ( Self-Balancing Binary Search Tree 或 Height-Balancing Binary Search Tree) :是一种二叉排序树,其中每一个节点的左子树和右子树的高度差至多等于1。它是一种高度平衡的二叉排序树。我们将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子 BF ( Balance Factor) ,所以平衡二叉树上所有的结点的平衡因子只可能是 -1 ,0 ,1。最小不平衡子树:距离插入点最近的,且平衡因子的绝对值大于 1 的结点为根..原创 2021-09-10 14:49:09 · 80 阅读 · 0 评论 -
数据结构_二叉排序树
树 ( Tree ) 是 n ( n ≥ 0) 个结点的有限集。n = 0 时称为空树。在任意一颗非空树中:有且仅有一个特定的称为 根 ( Root) 的结点 当 n > 1 时,其余结点可分为 m ( m > 0) 个互不相交的有限集 T₁ 、 T₂ 、 …… 、Tₘ ,其中每个集合本身又是一棵树,并且称为根的子树 ( SubTree ) 。 当 n > 0 时根节点是唯一的,不可能存在多个根结点。 m > 0 时,子树的个数没有限制,但它们一定是互不相交的。...原创 2021-09-10 10:23:43 · 60 阅读 · 0 评论 -
数据结构_树
树 ( Tree ) 是 n ( n ≥ 0) 个结点的有限集。n = 0 时称为空树。在任意一颗非空树中:有且仅有一个特定的称为 根 ( Root) 的结点 当 n > 1 时,其余结点可分为 m ( m > 0) 个互不相交的有限集 T₁ 、 T₂ 、 …… 、Tₘ ,其中每个集合本身又是一棵树,并且称为根的子树 ( SubTree ) 。...原创 2021-09-10 09:11:58 · 46 阅读 · 0 评论 -
数据结构_查找
目录静态查找表和动态查找表顺序表查找顺序查找有序表查找折半查找插值查找斐波那契查找线性索引查找稠密索引分块索引倒排索引查找表 ( Search Table) :是由同一类型得数据元素(或记录)构成的集合。关键字 ( Key ) :是数据元素中某个数据项的值,又称为键值。主关键字 ( Primary Key ):若此关键字可以唯一地标识一个记录,则称此关键字为主关键字 ( Primary Key ) 。主关键字所在的数据项称为主关键码。次关键字(..原创 2021-09-09 16:47:58 · 55 阅读 · 0 评论 -
数据结构_串 ( string )
串 ( string) 是由零个或多个字符组成的有限序列,又名叫字符串。一般记为 s = " a₁a₂ ... aₙ "( n ≥ 0) 。串中的字符数目 n 称为串的长度,零个字符的串称为空串 ( null string ) ,它的长度为零,可以直接用两双引号 "" 表示,也可以用希腊字母Φ 表示。...原创 2021-08-23 10:08:04 · 75 阅读 · 0 评论 -
数据结构_队列 ( queue )
队列 ( queue ) 是只允许在一段进行插入操作,而另一端进行删除操作的线性表。队列是一种先进先出 ( First In First Out) 的线性表,简称 FIFO 。允许插入的一端称为队尾,允许删除的一端称为队头。循环队列线性表有顺序存储和链式存储,栈是线性表,所以有这两种存储方式。同样队列作为一种特殊的线性表,也存在这两种存储方式。队列顺序存储的不足为了避免当只有一个元素时,队头和队尾重合使处理变得麻烦,所以引入两个指针,front 指针指向队头元素,rea.原创 2021-08-23 09:36:41 · 128 阅读 · 0 评论 -
数据结构_栈
d原创 2021-08-17 15:57:40 · 60 阅读 · 0 评论 -
数据结构_线性表
零个或多个数据元素的有限序列。直接前驱元素:aᵢ₋ₗ 是aᵢ 的直接前驱元素,有且只有一个。 直接后继元素:aᵢ₊ₗ 是aᵢ 的直接后继元素,有且只有一个。在较复杂的线性表中,一个数据元素可以由若干个数据项组成。线性表的抽象数据类型...原创 2021-08-16 09:14:26 · 72 阅读 · 0 评论 -
数据结构_线性表
线性表(List):零个或多个数据元素的有限序列。原创 2021-08-05 14:33:09 · 49 阅读 · 0 评论 -
数据结构_ 算法
目录1、算法2、算法的特性输入输出有穷性确定性可行性3、算法设计的要求正确性可读性健壮性时间效率高和存储量低4、算法效率的度量方法事后统计方法事前分析估算法5、算法时间复杂度算法时间复杂度的定义推导大O阶方法常见的时间复杂度6、最坏情况与平均情况7、算法空间复杂度1、算法算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。2、算法的特性输入 输出 有穷性原创 2021-08-03 10:37:55 · 89 阅读 · 2 评论 -
数据结构_抽象数据类型
1、数据类型是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。在C语言中按照取值的不同,把数据类型分成了两类:原子类型:不可以再分解的基本类型,包括整形、实型、字符型等。 结构类型:由若干个类型组合而成,是可以再分解的。例如,整形数组是由若干整形数据组成的。2、抽象数据类型(Abstract Data Type, ADT)是指一个数学模型及定义在该模型上的一组操作。※抽象:抽取出事物具有的普遍性的本质。抽象的意义在于数据类型的数学抽象特性。例如,在Unity原创 2021-08-02 17:23:51 · 1106 阅读 · 0 评论 -
数据结构_逻辑结构和物理结构
目录逻辑结构1、集合结构2、线性结构3、树形结构4、图形结构物理结构(存储结构)1、顺序存储结构2、链式存储结构逻辑结构逻辑结构:指数据对象中数据元素之间的相互关系。1、集合结构集合结构中的数据元素除了同属于一个集合外,他们之间没有其他关系。2、线性结构线性结构中的数据元素之间是一对一的关系。3、树形结构树形结构中的数据元素之间存在一种一对多的层次关系。4、图形结构图形结构的数据元素是多...原创 2021-08-02 16:54:38 · 314 阅读 · 0 评论 -
数据结构_基本概念和术语
数据是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的 符号集合 。数据项一个 数据元素 可以由若干个 数据项 组成。数据项是数据不可分割的 最小单位 。数据元素是组成数据的、有一定意义的 基本单位 ,在计算机中通常作为整体处理。也被称为 记录 。数据对象是性质相同的 数据元素 的集合,是数据的子集。数据结构不同数据元素之间不是独立的,而是存在特定的关系,我们将这种关系称为 结构 。数据结构就是相互之间存在一种或多种原创 2021-08-02 16:13:20 · 49 阅读 · 0 评论