数据结构
nyq0321
这个作者很懒,什么都没留下…
展开
-
排序
排序1. 衡量标准(1) 排序的稳定性两个相等的元素,排序前和排序后的先后位置不发生改变,则为稳定排序;否则为不稳定排序。(2) 内排序 外排序内排序:排序期间,数据元素都在内存中完成排序。外排序:排序期间,数据元素过多,不能同时放在内存,必须根据排序过程,不断在内存、外存之间移动。(3) 时间复杂度包括数据比较次数和数据移动次数,一般按平均情况进行估算。对于受初始排列影响较大的排序算法,按照最好、最坏估算。(4) 空间复杂度需要的额外空间。2. 插入排序将待排序的元素插入到已经排好原创 2020-05-16 22:21:20 · 146 阅读 · 0 评论 -
图
图1. 定义(1)完全有向图:n个定点的有向图有 n(n-1)条边。(2)完全无向图:n个定点的无向图有 n(n-1)/2条边。(3)简单路径:路径上各顶点互相不重复。(4)连通图和连通分量:无向图中,任意一对定点都是连通的,则该图为连通图。非连通图中的极大连通子图为连通分量。(5)强连通图和强连通分量:有向图中,任意一对定点都是双向连通的,则该图为强连通分量。非强连通图的极大强连通子图为强连通分量。(6)生成树:连通图的极小连通子图,n个顶点,有n-1条边。2. 图的表示(1)邻接矩阵原创 2020-05-15 15:34:07 · 373 阅读 · 0 评论 -
散列
散列1. 定义建立元素存储位置Address和关键码key之间的对应函数Hash(), Address = Hash(key)。散列方法应满足的条件:(1)计算简单,地址分布比较均匀,避免或尽量减少冲突。(2)拟定解决冲突的方案。2. 散列方法(1)直接定址法:取关键码的线性函数值作为散列地址。一一映射,不会冲突。(2)数字分析法:选取各种符号分布均匀的若干位作为散列地址。仅适用于提前知道每一位上数值分布情况。(3)除留余数法:已知允许的地址个数为m,取最接近于m的质数p作为除数。(4)原创 2020-05-14 20:15:34 · 247 阅读 · 0 评论 -
并查集
1. 并查集(1)最基础的实现方法//初始化parent[i]=i;//递归查找int Find(int i) //查找该结点的根结点{ if(parent[i]==i) return i; return Find(parent[i]);}//非递归查找int Find(int i){ int temp = parent[i]; while(temp!=i) { i = temp; temp = parent[i]; } return temp;}void Un原创 2020-05-14 19:23:10 · 98 阅读 · 0 评论 -
红黑树
1.定义(1)结点为红色或黑色,(2)根结点为黑色,(3)叶结点为黑色的空结点。(4)每个红色结点的两个子结点为黑色。(5)从任意结点到每个叶子结点的所有路径上的黑色结点数目相同。2.自平衡通过左旋、右旋和变色达到平衡。左旋、右旋与AVL树操作相同。3. 插入操作插入结点为红色。(1)空树:直接插入(2)插入结点已存在:退出(3)插入位置的父结点为黑色:直接插入(4)插入位置的父结点为红色:(4.1)叔叔结点存在,且为红色。(4.2)叔叔结点不存在或为黑色,并且插入结点的父原创 2020-05-14 14:33:22 · 135 阅读 · 0 评论 -
B树 B+树
1.多级索引结构——m路搜索树2. B树——平衡的m路搜索树B树是一个m叉平衡搜索树,每个结点包含关键码和指向子树的指针,用于索引。具有以下性质:(1) 性质根结点的子女数为 [2, M]根结点以外的子女数为 [(M/2)取上限, M]每个结点的关键数个数为 [(M/2)取上限-1, M-1]所有叶子结点位于同一层B树一定是平衡m路搜索树,平衡m路搜索树不一定是B树。(2)用途常用于数据库索引或文件索引。B树/B+树和平衡二叉搜索树的区别:若是用于数据库索引,索引文原创 2020-05-14 13:48:57 · 197 阅读 · 0 评论 -
二分查找 & 二叉搜索树 & 平衡二叉搜索树(AVL树)
1. 二分查找定义:基于有序顺序表的查找,时间复杂度O(logN)//非递归int binarySearch(int a[], int key){ int left=0, right = a.size()-1; while(left<=right) { int mid = left + (right-left)/2; if(a[mid] == key) return mid; else if(a[mid]>key) right = mid-1; else left原创 2020-05-14 09:18:49 · 190 阅读 · 0 评论 -
哈夫曼树
哈夫曼树1. 定义:带权路径长度最小的扩充二叉树。(1)带权路径长度WPL:所有叶结点的权重*叶结点到根的长度的和,也等于根节点的权值。(2)扩充二叉树:只有度为0和度为2的结点。2. 构建从森林中选取两棵根结点的权值最小的扩充二叉树,构建一颗新的二叉树,新的二叉树的根结点的权值为两树的权值之和。将该树加入森林。(注意:最后结果不一定都是一边倾斜的。)哈夫曼编码1. 用途:数据压缩,根据字符出现的频率,赋予每个字符不同的编码,以获取最短的字符串的总编码长度。...原创 2020-05-13 18:42:50 · 216 阅读 · 0 评论 -
堆
堆1. 实质:数组形式实现的完全二叉树2. 应用可以用来实现优先队列,插入、删除O(logN),最大、最小O(1)。3. 插入元素规则:新的元素插入在尾部,从下向上进行调整。j从最后一个元素开始,i=(j-1)/2.按照[10, 7, 2, 5, 1, 6, 5, 3 ]的顺序,依次插入构建最小堆。bool insert(int x){ if(currentSize == maxSize) return false; heap[currentSize] = x; currentSi原创 2020-05-13 18:25:17 · 134 阅读 · 0 评论 -
二叉树
二叉树1. 性质:(1)从上往下第i层,最多有2^(i-1)个结点。(2)深度为k的二叉树,最少有k个结点,最多有2^k - 1个结点。(3)假设叶结点有n0个,度为2的非叶结点有n2个,则n0 = n2+1。(4)完全二叉树,深度为k,则2k−1−1<n<=2k−12^{k-1}-1<n<=2^k-12k−1−1<n<=2k−1。n个结点,则k=log2n+1k=log_2^{n+1}k=log2n+1 取上限。2. 递归遍历(1)中序遍历(左根右,从原创 2020-05-13 14:40:14 · 164 阅读 · 0 评论 -
字符串匹配
字符串匹配问题描述:在字符串T中找模式串P的位置目标串T,长度为N模式串P,长度为MBF算法:时间复杂度:O(N*M)KMP算法:思想:BF算法在字符串失配后,目标串的指针都要回退到开始位置+1。KMP消除了目标指针的回退,提高模式匹配效率。既然消除了目标串的指针回退,那么变化的是模式串P的指针。当发生失配时,模式串P中哪个字符和目标串继续比较?–》next特征向量。next的计算int k=-1;(1)j==0,next[0] = -1;(2)j > 0,原创 2020-05-12 18:03:41 · 156 阅读 · 0 评论 -
数组和链表的区别
数组和链表的区别存储方式:数组连续存储,链表非连续存储,需要额外的指针存储空间。插入(删除)(1)头插:数组需要移动大量数据;链表插入速度快(但是需要讨论链表是否为空,若用带头结点的链表则不用讨论)。(2)尾插:数组插入速度快;链表插入速度慢(因为要找到尾节点,若用双向循环链表则快)。(3)中间:数组需要移动大量数据;链表不需要移动大量数据,但是都需要顺序查找插入的位置。查找:都需要顺序查找随机访问:数组O(1),链表O(n)。...原创 2020-05-12 12:32:13 · 153 阅读 · 0 评论