2023数据结构
文章平均质量分 90
ZhangJiQun&MXP
远离消耗你的人,在你的喜欢的能量场下才能加快脚步。
变化是在平常不过的事情,但选择不变,才是人的能力。
展开
-
数据结构之动态内存管理机制
使用伙伴系统进行存储空间的管理过程中,在用户申请空间时,由于大小不同的空闲块处于不同的链表中,所以分配完成的速度会更快,算法相对简单。回收存储空间时,对于空闲块的合并,不是取决于该空闲块的相邻位置的块的状态;而是完全取决于其伙伴块。所以即使其相邻位置的存储块时空闲块,但是由于两者不是伙伴的关系,所以也不会合并。由于在合并时只考虑伙伴,所以容易产生存储的碎片。无用单元的收集可以采用以上 3 中算法中任何一种。原创 2023-08-16 16:05:26 · 888 阅读 · 1 评论 -
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
本节介绍了两种遍历图的方式:深度优先搜索算法和广度优先搜索算法。深度优先搜索算法的实现运用的主要是回溯法,类似于树的先序遍历算法。广度优先搜索算法借助队列的先进先出的特点,类似于树的层次遍历。原创 2023-08-16 15:38:17 · 4137 阅读 · 0 评论 -
图的顺序存储结构
使用图结构表示的数据元素之间虽然具有“多对多”的关系,使用数组存储图时,需要使用两个数组,存储图中各顶点本身数据,使用一维数组就足够了;存储顶点之间的关系时,要记录每个顶点和其它所有顶点之间的关系,所以需要使用二维数组。不同类型的图,存储的方式略有不同,根据图有无权,可以将图划分为两大类:图和网。图,包括无向图和有向图;网,是指带权的图,包括无向网和有向网。存储方式的不同,指的是:在使用二维数组存储图中顶点之间的关系时,如果顶点之间存在边或弧,;原创 2023-08-16 15:30:36 · 104 阅读 · 0 评论 -
数据结构的图存储结构
前面讲过,图中从一个顶点到达另一顶点,若存在至少一条路径,则称这两个顶点是连通着的。例如图 1 中,虽然 V1 和 V3 没有直接关联,但从 V1 到 V3 存在两条路径,分别是V1-V2-V3和V1-V4-V3,因此称 V1 和 V3 之间是连通的。图 1 顶点之间的连通状态示意图无向图中,如果任意两个顶点之间都能够连通,则称此无向图为连通图。例如,图 2 中的无向图就是一个连通图,因为此图中任意两顶点之间都是连通的。图 2 连通图示意图。原创 2023-08-16 11:58:08 · 784 阅读 · 0 评论 -
回溯算法详解
在树中的体现,就是在树的最后一层不是满的,即不是满二叉树,需要自己判断哪些叶子结点代表的是正确的结果。每一棵普通树对应的都是一棵没有右子树的二叉树,所以对于 n 个结点的树来说,树的形态改变是因为除了根结点之外的其它结点改变形态得到的,所以,n 个结点构建的形态不同的树与之对应的是 n-1 个结点构建的形态不同的二叉树。所以,中序序列的个数就是数列(1,2,3)按1-2-3的顺序进栈,各元素选择在不同的时间点出栈,所获的的不同的出栈顺序即为中序序列,而中序序列的数目,也就是不同形态的二叉树的个数。原创 2023-08-16 11:42:28 · 128 阅读 · 0 评论 -
哈夫曼树(赫夫曼树、最优树)详解
当用 n 个结点(都做叶子结点且都有各自的权值)试图构建一棵树时,如果构建的这棵树的带权路径长度最小,称这棵树为“最优二叉树”,有时也叫“赫夫曼树”或者“哈夫曼树”。权重越大的结点离树根越近。在图 1 中,因为结点 a 的权值最大,所以理应直接作为根结点的孩子结点。原创 2023-08-16 11:35:21 · 950 阅读 · 0 评论 -
数据结构的树存储结构
树型存储结构类似于家族的族谱,各个结点之间也同样可能具有父子、兄弟、表兄弟的关系。本节中,要重点理解树的根结点和子树的定义,同时要会计算树中各个结点的度和层次,以及树的深度。本身是有序树;树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2;例如,图 1a) 就是一棵二叉树,而图 1b) 则不是。图 1 二叉树示意图。原创 2023-08-16 11:27:44 · 501 阅读 · 0 评论 -
什么是广义表
在实现复制广义表的过程中,实现函数为:其中,Glist *T,等同于: struct GLNode* *T,此为二级指针,不是一级指针。在主函数中,调用此函数时,传入的是指针 T 的地址,而不是 T。这里使用的是地址传递,而不是值传递。如果在这里使用值传递,会导致广义表 T 丢失结点,复制失败。原创 2023-08-16 10:48:10 · 258 阅读 · 0 评论 -
十字链表法,十字链表压缩存储稀疏矩阵详解
例如,A 和 B 分别为两个矩阵,在实现 "将矩阵 B 加到矩阵 A 上" 的操作时,矩阵 A 中的元素会发生很大的变化,之前的非 0 元素可能变为 0,而 0 元素也可能变为非 0 元素。对于此操作的实现,之前。可以看到,使用十字链表压缩存储稀疏矩阵时,矩阵中的各行各列都各用一各链表存储,与此同时,所有行链表的表头存储到一个数组(rhead),所有列链表的表头存储到另一个数组(chead)中。图 2a) 表示的是图 1 中转置之前矩阵的三元组表,2b) 表示的是图 1 中矩阵转置后对应的三元组表。原创 2023-08-16 09:03:18 · 3998 阅读 · 1 评论 -
什么是数组存储结构
前面学习的过程中,总是使用数组作为的底层实现,给我们一种 "数据结构中,数组的作用就是实现顺序表" 的错误认识。其实,数组的作用远不止于此。本节将从数据结构的角度讲解数组存储结构。本节所讲的数组,要将其视为一种存储结构,与平时使用的数组基本数据类型区分开。一说起数组,我们的印象中数组往往是某一门编程语言中包含的具体数据类型,其实不然。从本质上讲,数组与顺序表、和一样,都用来存储具有 "一对一" 逻辑关系数据的。原创 2023-08-16 08:53:49 · 111 阅读 · 0 评论 -
串是什么,串存储结构的3种实现方法
因为 strcpy 函数是将字符串复制到申请的存储空间中,而直接赋值是字符串存储在别的内存空间(本身是一个常量,放在数据区)中,更改了指针 a1 和 a2 的指向,也就是说,之前动态申请的存储空间虽然申请了,结果还没用呢就丢了。例如,串 a = "shujujiegou",串 b = "jiegou",通过观察,可以判断 a 和 b 是主串和子串的关系,同时子串 b 位于主串 a 中第 6 的位置,因为在串 a 中,串 b 首字符 'j' 的位置是 6。,因为字符串中的字符之间也具有"一对一"的逻辑关系。原创 2023-08-16 08:43:39 · 257 阅读 · 0 评论 -
栈存储结构详解
队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的线性存储结构。与栈结构不同的是,队列的两端都"开口",要求数据只能从一端进,从另一端出,如图 1 所示:图 1 队列存储结构通常,称进数据的一端为 "队尾",出数据的一端为 "队头",数据元素进队列的过程称为 "入队",出队列的过程称为 "出队"。不仅如此,队列中数据的进出要遵循"先进先出"的原则,即最先进队列的数据元素,同样要最先出队列。原创 2023-08-15 22:06:59 · 539 阅读 · 0 评论 -
数据结构中公式前中后缀表达式-二叉树应用
显然,这种表达方式是有歧义的,比如ab是一颗子树,cd是一颗子树,最后相减,遍历结果和上面是一样的。那么问题就来了,树只是一种抽象的数据结构,它必须要通过某个形式的文本来才能存储和输入。它们分别相当于树的前序遍历、中序遍历、后序遍历,前中后指的是遍历时符号的遍历顺序。因此实际计算机程序中,基本都是用后缀表达式来存储公式的,前缀表达式效果次之。相对于前缀表达式来说,后缀表达式的符号读取顺序,和人类阅读习惯是一致的。这种表达方式是没有歧义的,可以直接作为前缀表达式的结果。上面的公式,先序遍历的结果为。原创 2023-08-15 22:06:41 · 503 阅读 · 0 评论 -
线性表,双向链表,静态链表,循环链表(约瑟夫环)
通过前面的学习我们知道,具有“一对一”逻辑关系的数据,最佳的存储方式是使用线性表。那么,什么是线性表呢?线性表,全名为线性存储结构。使用线性表存储数据的方式可以这样理解,即“把所有数据用一根线儿串起来,再存储到物理空间中”。图 1 "一对一"逻辑关系的数据如图 1 所示,这是一组具有“一对一”关系的数据,我们接下来采用线性表将其储存到物理空间中。首先,用“一根线儿”把它们按照顺序“串”起来,如图 2 所示:图 2 数据的"线性"结构。原创 2023-08-15 21:55:30 · 239 阅读 · 0 评论 -
什么是数据结构
数据结构,直白地理解,就是研究数据的存储方式。我们知道,数据存储只有一个目的,即为了方便后期对数据的再利用,就如同我们使用数组存储是为了后期取得它们的加和值,无缘由的数据存储行为是对存储空间的不负责任。因此,数据在计算机存储空间的存放,决不是胡乱的,这就要求我们选择一种好的方式来存储数据,而这也是数据结构的核心内容。原创 2023-08-15 20:18:57 · 349 阅读 · 0 评论