-
何为查找表
所属栏目:[语言] 日期:2022-07-10 热度:108
在日常生活中,几乎每天都要进行一些查找的工作,在电话簿中查阅某个人的电话号码;在电脑的文件夹中查找某个具体的文件等等。本节主要介绍用于查找操作的数据结构查找表。 查找表是由同一类型的数据元素构成的集合。例如电话号码簿和字典都可以看作是一张[详细]
-
顺序查找算法解说 包含C语言实现代码
所属栏目:[语言] 日期:2022-07-10 热度:176
通过前面对静态查找表的介绍,静态查找表即为只做查找操作的查找表。 静态查找表既可以使用顺序表表示,也可以使用链表结构表示。虽然一个是数组、一个链表,但两者在做查找操作时,基本上大同小异。 本节以静态查找表的顺序存储结构为例做详细的介绍。 顺[详细]
-
二分查找 折半寻找 算法详解 C语言实现
所属栏目:[语言] 日期:2022-07-10 热度:135
折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高。但是该算法的使用的前提是静态查找表中的数据必须是有序的。 例如,在{5,21,13,19,37,75,56,64,88 ,80,92}这个查找表使用折半查找算法查找数据之前,需要首先对该表中的[详细]
-
二叉排序树 二叉查找树 及C语言达成
所属栏目:[语言] 日期:2022-07-10 热度:114
前几节介绍的都是有关静态查找表的相关知识,从本节开始介绍另外一种查找表动态查找表。 动态查找表中做查找操作时,若查找成功可以对其进行删除;如果查找失败,即表中无该关键字,可以将该关键字插入到表中。 动态查找表的表示方式有多种,本节介绍一种[详细]
-
平衡二叉树 AVL树 与C语言实现
所属栏目:[语言] 日期:2022-07-10 热度:97
上一节介绍如何使用二叉排序树实现动态查找表,本节介绍另外一种实现方式平衡二叉树。 平衡二叉树,又称为 AVL 树。实际上就是遵循以下两个特点的二叉树: 每棵子树中的左子树和右子树的深度差不能超过 1; 二叉树中每棵子树都要求是平衡二叉树; 其实就是[详细]
-
哈希表 散列表 详解 包含哈希表处理冲突的方式
所属栏目:[语言] 日期:2022-07-10 热度:116
前面介绍了静态查找表以及动态查找表中的一些查找方法,其查找的过程都无法避免同查找表中的数据进行比较,查找算法的效率很大程度取决于同表中数据的查找次数。 而本节所介绍的哈希表可以通过关键字直接找到数据的存储位置,不需要进行任何的比较,其查找[详细]
-
插入排序算法及C语言做成
所属栏目:[语言] 日期:2022-07-10 热度:56
插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。 直接插入排序是插入排序算法中的一种,采用的方法是:在添加新的记录时,使用顺序查找的方式找[详细]
-
折半插入排序算法 C语言代码达成
所属栏目:[语言] 日期:2022-07-10 热度:53
上一节介绍了直接插入排序算法的理论实现和具体的代码实现,如果你善于思考就会发现该算法在查找插入位置时,采用的是顺序查找的方式,而在查找表中数据本身有序的前提下,可以使用折半查找来代替顺序查找,这种排序的算法就是折半插入排序算法。 该算法的[详细]
-
2路插入排序算法说明
所属栏目:[语言] 日期:2022-07-10 热度:74
2-路插入排序算法是在折半插入排序的基础上对其进行改进,减少其在排序过程中移动记录的次数从而提高效率。 具体实现思路为:另外设置一个同存储记录的数组大小相同的数组 d,将无序表中第一个记录添加进 d[0] 的位置上,然后从无序表中第二个记录开始,同[详细]
-
内存紧缩 内存碎片化处置
所属栏目:[语言] 日期:2022-07-10 热度:174
前边介绍的有关动态内存管理的方法,无论是边界标识法还是伙伴系统,但是以将空闲的存储空间链接成一个链表,即可利用空间表,对存储空间进行分配和回收。 本节介绍另外一种动态内存管理的方法,使用这种方式在整个内存管理过程中,不管哪个时间段,所有未[详细]
-
串的定长顺序存储构架
所属栏目:[语言] 日期:2022-07-09 热度:58
我们知道,顺序存储结构(顺序表)的底层实现用的是数组,根据创建方式的不同,数组又可分为静态数组和动态数组,因此顺序存储结构的具体实现其实有两种方式。 通常所说的数组都指的是静态数组,如 str[10],静态数组的长度是固定的。与静态数组相对应的,[详细]
-
串的堆分配存储框架
所属栏目:[语言] 日期:2022-07-09 热度:69
串的堆分配存储,其具体实现方式是采用动态数组存储字符串。 通常,编程语言会将程序占有的内存空间分成多个不同的区域,程序包含的数据会被分门别类并存储到对应的区域。拿 C 语言来说,程序会将内存分为 4 个区域,分别为堆区、栈区、数据区和代码区,其[详细]
-
串的块链存储构造
所属栏目:[语言] 日期:2022-07-09 热度:80
串的块链存储,指的是使用链表结构存储字符串。 链表各节点存储数据个数的多少可参考以下几个因素: 串的长度和存储空间的大小:若串包含数据量很大,且链表申请的存储空间有限,此时应尽可能的让各节点存储更多的数据,提高空间的利用率(每多一个节点,[详细]
-
BF算法 串模式匹配算法 C语言解说
所属栏目:[语言] 日期:2022-07-09 热度:118
串的模式匹配算法,通俗地理解,是一种用来判断两个串之间是否具有主串与子串关系的算法。 主串与子串:如果串 A(如 shujujiegou)中包含有串 B(如 ju),则称串 A 为主串,串 B 为子串。主串与子串之间的关系可简单理解为一个串 包含 另一个串的关系。[详细]
-
什么叫做数组存储结构
所属栏目:[语言] 日期:2022-07-09 热度:89
前面学习数据结构的过程中,总是使用数组作为顺序表的底层实现,给我们一种 数据结构中,数组的作用就是实现顺序表 的错误认识。其实,数组的作用远不止于此。 本节将从数据结构的角度讲解数组存储结构。 本节所讲的数组,要将其视为一种存储结构,与平时[详细]
-
数组的排序存储 C语言版
所属栏目:[语言] 日期:2022-07-09 热度:145
数组作为一种线性存储结构,对存储的数据通常只做查找和修改操作,因此数组结构的实现使用的是顺序存储结构。 要知道,对数组中存储的数据做插入和删除操作,算法的效率是很差的。 通过以上内容,我们掌握了将多维数组存储在一维内存空间的方法。那么,后[详细]
-
矩阵 稀疏矩阵 压缩存储 3种方案
所属栏目:[语言] 日期:2022-07-09 热度:143
数据结构中,提供针对某些特殊矩阵的压缩存储结构。 矩阵中有两条对角线,其中的对角线称为主对角线,另一条从左下角到右上角的对角线为副对角线。对称矩阵指的是各数据元素沿主对角线对称的矩阵。 结合数据结构压缩存储的思想,我们可以使用一维数组存储[详细]
-
三元组顺序表 稀疏矩阵的三元组表示及 C语言 做成
所属栏目:[语言] 日期:2022-07-09 热度:187
本节介绍稀疏矩阵的三元组顺序表压缩存储方式。 通过《矩阵的压缩存储》一节我们知道,稀疏矩阵的压缩存储,至少需要存储以下信息: 矩阵中各非 0 元素的值,以及所在矩阵中的行标和列标; C 语言中,三元组需要用结构体实现,如下所示: //三元组结构体 t[详细]
-
行逻辑链接的顺序表 压缩存储稀疏矩阵 细说
所属栏目:[语言] 日期:2022-07-09 热度:122
前面学习了如何使用三元组顺序表存储稀疏矩阵,其实现过程就是将矩阵中各个非 0 元素的行标、列标和元素值以三元组的形式存储到一维数组中。通过研究实现代码你会发现,三元组顺序表每次提取指定元素都需要遍历整个数组,运行效率很低。 本节将学习另一种[详细]
-
十字链表法 十字链表压缩存储稀疏矩阵解析
所属栏目:[语言] 日期:2022-07-09 热度:172
对于压缩存储稀疏矩阵,无论是使用三元组顺序表,还是使用行逻辑链接的顺序表,归根结底是使用数组存储稀疏矩阵。介于数组 不利于插入和删除数据 的特点,以上两种压缩存储方式都不适合解决类似 向矩阵中添加或删除非 0 元素 的问题。 例如,A 和 B 分别为[详细]
-
矩阵 稀疏矩阵 的转置算法 C语言 说明
所属栏目:[语言] 日期:2022-07-08 热度:153
矩阵(包括稀疏矩阵)的转置,即互换矩阵中所有元素的行标和列标, 矩阵转置的实现思路是:不断遍历存储矩阵的三元组表,每次都取出表中 j 列最小的那一个三元组,互换行标和列标的值,并按次序存储到一个新三元组表中,。 例如,将图 2a) 三元组表存储的[详细]
-
什么叫做广义表
所属栏目:[语言] 日期:2022-07-08 热度:161
前面讲过,数组即可以存储不可再分的数据元素(如数字 5、字符 a),也可以继续存储数组(即 n 维数组)。 但需要注意的是,以上两种数据存储形式绝不会出现在同一个数组中。例如,我们可以创建一个整形数组去存储 {1,2,3},我们也可以创建一个二维整形数[详细]
-
广义表的存储结构详解 包括2种存储方案
所属栏目:[语言] 日期:2022-07-08 热度:191
由于广义表中既可存储原子(不可再分的数据元素),也可以存储子表,因此很难使用顺序存储结构表示,通常情况下广义表结构采用链表实现。 使用顺序表实现广义表结构,不仅需要操作 n 维数组(例如 {1,{2,{3,4}}} 就需要使用三维数组存储),还会造成存储空[详细]
-
广义表的复制解说 含C语言代码实现
所属栏目:[语言] 日期:2022-07-08 热度:132
对于任意一个非空广义表来说,都是由两部分组成:表头和表尾。反之,只要确定的一个广义表的表头和表尾,那么这个广义表就可以唯一确定下来。 代码实现: #include stdio.h #include stdlib.h typedef struct GLNode{ int tag;//标志域 union{ char atom;/[详细]
-
数据结构的树存储构架
所属栏目:[语言] 日期:2022-07-08 热度:129
将具有一对多关系的集合中的数据元素按照图 1(A)的形式进行存储,整个存储形状在逻辑结构上看,类似于实际生活中倒着的树(图 1(B)倒过来),所以称这种存储结构为树型存储结构。 树的结点 结点:使用树结构存储的每一个数据元素都被称为结点。例如,[详细]
