数据结构
文章平均质量分 82
考研笔记
señoritaw
这个作者很懒,什么都没留下…
展开
-
数据结构笔记(全)
线性表:是具有相同数据类型的 n 个数据元素的有限序列。(Eg:所有的整数按递增次序排列,不是顺序表,因为所有的整数是无限的)其中n为表长,当n=0时线性表是一个空表。若用L表示一个线性表,则是线性表中的第i个元素,称为线性表中的位序是表头元素;是表尾元素。除第一个元素外,每个元素有且仅有一个直接前驱;除最后一个元素外,每个元素有且仅有一个直接后继2.1.2 线性表的基本操作InitList(&L):初始化表。构造一个空的线性表 L,分配内存空间。原创 2024-04-25 12:28:07 · 2846 阅读 · 0 评论 -
数据结构(八)——排序
排序(Sort),就是重新排列表中的元素,使表少的元素满足按关键字有序的过程。输入∶n个记录R1,R2...., Rn,对应的关键字为k1, k2,... , kn输出:输入序列的一个重排R1',R2'....,Rn',使得有k1'≤k2'≤...≤kn'(也可递减)算法的稳定性。若待排序表中有两个元素R,和R,其对应的关键字相同即key = keyj,且在排序前R;在R,的前面,若使用某一排序算法排序后,R仍然在R的前面,则称这个排序算法是稳定的,否则称排序算法是不稳定的。原创 2024-04-25 12:14:16 · 1347 阅读 · 1 评论 -
数据结构(七)——B树和B+树
4)在B+树中,叶结点包含信息,所有非叶结点仅起索引作用,非叶结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。5)所有的叶结点都出现在同一层次上,并且不带信息(可以视为外部结点或类似于折半查找判定树的查找失败结点,实际上这些结点不存在,指向这些结点的指针为空)。B树,又称多路平衡查找树,B树中所被允许的孩子个数的最大值称为B树的阶,通常用m表示。3)在B+树中,叶结点包含全部关键字,非叶结点中出现过的关键字也会出现在叶结点中。原创 2024-04-17 20:12:31 · 977 阅读 · 0 评论 -
数据结构(七)——树形查找
平衡二叉树AVL:插入/删除很容易破坏“平衡”特性,需要频繁调整树的形态。如:插入操作导致不平衡,则需要先计算平衡因子,找到最小不平衡子树(时间开销大),再进行LL/RR/LR/RL调整红黑树RBT:插入/删除很多时候不会破坏“红黑”特性,无需频繁调整树的形态。即便需要调整,一般都可以在常数级时间内完成平衡二叉树:适用于以查为主、很少插入/删除的场景红黑树:适用于频繁插入、删除的场景,实用性更强红黑树的定义红黑树是二叉排序树一左子树结点值≤根结点值≤右子树结点值。原创 2024-04-11 21:41:37 · 1326 阅读 · 0 评论 -
数据结构(七)——查找的基本概念
平均查找长度(ASL, Average Search Length)——所有查找过程中进行关键字的比较次数的平均值。关键字 —— 数据元素中唯⼀标识该元素的某个数据项的值,使⽤基于关键字的查找,查找结果应该是唯⼀的。查找表(查找结构)—— ⽤于查找的数据集合称为查找表,它由同⼀类型的数据元素(或记录)组成。查找 —— 在数据集合中寻找满⾜某种条件的数据元素的过程称为查找。查找长度——在查找运算中,需要对比关键字的次数称为查找长度。查找效率:查找成功和查找失败都是O(n)的数量级。原创 2024-04-08 15:07:23 · 584 阅读 · 0 评论 -
数据结构(六)——图的应用
设R为G的所有⽣成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的最小生成树(Minimum-Spanning-Tree, MST)。第5轮:循环遍历所有个结点,找 到lowCost最低的,且还没加入树的顶点。第1轮:循环遍历所有个结点,找到lowCost最低的,且还没加入树的顶点。第3轮:循环遍历所有个结点,找到lowCost最低的,且还没加入树的顶点。第4轮:循环遍历所有个结点,找到lowCost最低的,且还没加入树的顶点。第1轮:检查第1条边的两个顶点是否 连通(是否属于同⼀个集合)原创 2024-04-01 23:33:26 · 1541 阅读 · 0 评论 -
数据结构(六)——图的遍历
NextNeighbor(G,x,y):假设图G中顶点y是顶点x的⼀个邻接点,返回除y之外 顶点x的下⼀个邻接点的顶点号,若y是x的最后⼀个邻接点,则返回-1。查找每个顶点的邻接点都需要O(|V|)的时间,而总共有|N个顶点时间复杂度=O(|V|^2)查找各个顶点的邻接点共需要O(E)的时间,时间复杂度=O(|V|+|E|)查找每个顶点的邻接点都需要O(|V|)的时间,⽽总共有|V|个顶点。访问 |V| 个顶点需要O(|V|)的时间。访问 |V| 个顶点需要O(|V|)的时间。原创 2024-03-31 20:25:49 · 826 阅读 · 0 评论 -
数据结构(六)——图的存储及基本操作
无向图的邻接矩阵是对称矩阵,可以压缩存储(只存储上三角区/下三角区)空间复杂度:O(|V|^2) ——只和顶点数相关,和实际的边数无关。邻接矩阵法求顶点的度/出度/入度的时间复杂度为O(|V|)第i个结点的度 = 第i行、第i列的非零元素个数之和。第i个结点的度 = 第i行(或第i列)的非零元素个数。第i个结点的出度 = 第i行的非零元素个数。第i个结点的入度 = 第i列的非零元素个数。注意:邻接多重表只适 用于存储无向图。空间复杂度:O(|V|+|E|)空间复杂度:O(|V|+|E|)原创 2024-03-30 20:52:21 · 1385 阅读 · 0 评论 -
数据结构(六)——图
图G由顶点集V和边集E组成,记为G = (V, E),其中V(G)表示图G中顶点的有限非空集;E(G) 表示图G中顶点之间的关系(边)集合。若V = {v1, v2, … , vn},则用|V|表示图G中顶点的个 数,也称图G的阶,,用|E|表示图G中边的条数。注意:线性表可以是空表,树可以是空树,但图不可以是空,即V一定是非空集:若E是无向边(简称边)的有限集合时,则图G为无向图。边是顶点的无序对,记为(v, w)或(w, v),因为(v, w) = (w, v),其 中v、w是顶点。原创 2024-03-28 15:39:56 · 1215 阅读 · 1 评论 -
数据结构(五)——树与二叉树的应用
在含有 n 个带权叶结点的二叉树中,其中带权路径长度(WPL)最小的二叉树称为哈夫曼树,也称最优二叉树。原创 2024-03-25 22:15:59 · 1094 阅读 · 0 评论 -
数据结构(五)——树森林
处理一个结点的方法是:如果当前处理的结点在树中有孩子,就把所有孩子结点 “用右指针串成糖葫芦”,并在二叉树中把第一个孩子挂在当前结点的左指针下方。处理一个结点的方法是:如果当前处理的结点在树中有孩子,就把所有孩子结点“用右 指针串成糖葫芦”,并在二叉树中把第一个孩子挂在当前结点的左指针下方。如何恢复一个结点的孩子:在二叉树中,如果当前处理的结点有左孩子,就把左孩子和“一整串右指针糖葫 芦” 拆下来,按顺序挂在当前结点的下方。②从树的根节点开始,按“树的层序”恢复每个结点的孩子。原创 2024-03-24 23:05:48 · 839 阅读 · 0 评论 -
数据结构(五)——二叉树的遍历和线索二叉树
普通二叉树进行遍历时,找前驱、后继很不方便,且每次都要从根结点出发,无法从一个指定的结点开始遍历。tag == 1 时,表示指针是“线索”。②若 p->rtag==0,则 next = p 的右子树中最左下结点。①若 p->rtag==1,则 next = p->rchild。①若 p->rtag==1,则 next = p->rchild。①若 p->ltag==1,则 next = p->lchild。①若 p->rtag==1,则 next = p->rchild。原创 2024-03-23 07:51:07 · 1234 阅读 · 0 评论 -
数据结构(五)——二叉树的概念
二叉树是n(n≥0)个结点的有限集合:① 或者为空二叉树,即n = 0。② 或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。特点:①每个结点至多只有两棵子树 ②左右子树不能颠倒(二叉树是有序树)二叉树的五种状态空二叉树只有左子树(即右子树为空)只有右子树(即左子树为空)只有根节点(左右子树都为空)左右子树都有几个特殊的二叉树满二叉树。一棵高度为h,且含有2^h - 1个结点的二叉树特点:①只有最后一层有叶子结点。原创 2024-03-20 11:45:53 · 1463 阅读 · 0 评论 -
数据结构(五)——树的基本概念
n>=0)原创 2024-03-19 10:54:50 · 410 阅读 · 0 评论 -
数据结构(四)——串的模式匹配
主串⻓度为n,模式串⻓度为 m 朴素模式匹配算法:将主串中所有⻓度为m的⼦串依次与模式串对⽐,直到找到⼀个完全匹配的⼦串, 或所有的⼦串都不匹配为⽌。接下来的字符,在不匹配的位置前划一根分界线,模式串一步一步往后退,直到分界线前的“对的上”,或模式串完全越过分界线位置,如下面为第3个字符不匹配的情况。最坏的情况,每个⼦串都要对⽐ m 个字符,共 n-m+1 个⼦串,复杂度 = O((n-m+1)m) = O(nm)任何模式串第⼀个字符不匹配时,只能匹配下⼀个⼦串,因此,next[1]都⽆脑写 0。原创 2024-03-18 22:38:20 · 1165 阅读 · 0 评论 -
数据结构(四)——串的定义和基本操作
例:T=‘iPhone 11 Pro Max?连续的Eg:’iPhone’,’Pro M’ 是串T 的子串Eg:T 是子串’iPhone’的主串Eg:’1’在T中的位置是8(第一次出现)Eg:’11 Pro’在 T 中的位置为8注意:串的位序是从1开始而不是从0开始串是一种特殊的线性表,数据元素之间呈线性关系串的数据对象限定为字符集(如中文字符、英文字符、数字字符、标点字符等)原创 2024-03-18 08:15:00 · 1339 阅读 · 0 评论 -
数据结构(三)——数组和特殊矩阵
存储,则b[i][j] 的存储地址 = LOC + ( j*M+ i ) * sizeof(ElemType)存储,则b[i][j] 的存储地址 = LOC + (i*N + j) * sizeof(ElemType)数组元素a[i] 的存放地址 = LOC + i * sizeof(ElemType) (0≤i<10)策略:只存储主对角线+下三角区 按行优先原则将各元素存入一维数组中。M行N列的二维数组 b[M][N] 中,若按。M行N列的二维数组 b[M][N] 中,若按。原创 2024-03-16 10:45:46 · 294 阅读 · 0 评论 -
数据结构(三)——栈和队列的应用
但对于计算机来说中缀表达式是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式, 若碰到“(” 或栈空则停止。注意:“(”不加入后缀表达式。从左往右扫描,每遇到一个运算符,就让运算符前面最近的两个操作数执行对应运算, 合体为一个操作数。③若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①。③若扫描到运算符,则弹出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①。原创 2024-03-15 15:53:12 · 950 阅读 · 0 评论 -
数据结构(三)——队列
队列已满的条件:队尾指针的再下一个位置是队头,即(Q.rear+1)%MaxSize==Q.front。判空:(Q.rear+1)%MaxSize==Q.front //判断队尾指针的下一个位置是不是队头。如果不牺牲一个单元来区分队空和队满的话,不能使用Q.rear == Q.front作为判空的条件。QueueEmpty(Q):判队列空,若队列Q为空返回true,否则返回false。InitQueue(&Q):初始化队列,构造一个空队列Q。队空条件:Q.rear==Q.front。原创 2024-03-14 08:00:00 · 1100 阅读 · 0 评论 -
数据结构(三)——栈
和单链表的定义几乎没差别。原创 2024-03-12 14:50:49 · 1173 阅读 · 0 评论 -
数据结构(二)——顺序表和链表的比较
A:顺序表和链表的逻辑结构都是线性结构,都属于线性表。但是二者的存储结构不同,顺序表采用顺序存储…(特点,带来的优点缺点);由于采用不同的存储方式实现,因此基本操作的实现效率也不同。顺序存储逻辑上相邻的元素,对应的物理存储位置也相邻,链式存储逻辑上相邻的元素物理存储位置不一定相邻,对应的逻辑关系是通过指针链接来表示的。动态分配:动态数组(malloc、free),容量可以改变,但是需要移动大量元素,时间代价高。顺序表可以顺序存取,也可以随机存取,在第i个位置上执行存取操作,顺序表仅需一次访问.原创 2024-03-11 09:38:12 · 577 阅读 · 0 评论 -
数据结构(二)——线性表(双链表)
双链表结点中有两个指针prior和next,分别指向其直接前驱和直接后继表头结点的prior域和尾结点的next域都是NULL。原创 2024-03-10 12:30:34 · 477 阅读 · 0 评论 -
数据结构(二)——线性表(单链表)
不带头结点,写代码更麻烦 对第一个数据结点和后续数据结点的 处理需要用不同的代码逻辑 对空表和非空表的处理需要用不同的 代码逻辑。ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。找到第i-1个结点,将其指针指向第i+1个结点,并释放第i个结点,头结点可看做“第0个”结点。一个结点存储一个数据元素,各结点间的前后关系用一个指针表示。要表示一个单链表时,只需要表明一个头指针L,指向单链表的第一个结点。删除结点p,需要修改其前驱 结点的 next 指针。原创 2024-03-09 10:39:22 · 1387 阅读 · 0 评论 -
数据结构(二)——线性表(顺序表)
顺序表:用顺序存储的方式实现线性表顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中C语言中通过sizeof(ElementType)可以知道一个数据元素的大小。原创 2024-03-06 16:51:33 · 1060 阅读 · 0 评论 -
时间复杂度考点总结
解答:i=1时循环1次,i=2时循环2次,i=4时循环4次,所以循环次数为1+2+4+...+2的x次方。【2022统考真题】下列程序段的时间复杂度是( )。时间复杂度主要考察的是循环,循环分为一层循环和多层循环。这个跟最上面的题的区别是内层循环的次数每次都是n。基本方法:数出指令总执行次数,再确定数量级。时间复杂度的定义:指令执行总次数的数量级。这道题容易错选为C,正确答案是B。,所以数量级为O(n)x表示外层循环次数,原创 2024-03-06 15:36:09 · 515 阅读 · 0 评论 -
数据结构(一)——概述
数据:用来描述客观事物的数、计算机中是字符及所有能输入并被程序识别和处理的符号的集合。数据元素:数据的基本单位,一个数据元素可由若干数据项组成。数据结构:指相互之间存在一种或多种特定关系的数据元素的集合。数据结构的三要素:逻辑结构、存储结构、数据的运算。数据对象:具有相同性质的数据元素的集合,是数据的一个子集。逻辑结构:指数据元素之间的逻辑关系存储结构(物理结构):用计算机表示数据元素的逻辑关系(后三种统称为非顺序存储)数据的运算:运算的定义是针对逻辑结构的, 指出运算的功能;原创 2024-03-04 16:06:09 · 1333 阅读 · 1 评论