数据结构小知识专栏
文章平均质量分 85
主要对数据结构和算法做一个介绍和程序设计讲解,对于数据结构和算法其实我更愿意称数据结构为一种数据思想
九月丫
爱好编程,爱好生活
展开
-
数据结构-链表list.h 使用操作
读者可自己画个读,就不难发现 list_add_tail 宏所实现的是一个类头插法,它是将节点插入在头节点的前面,但是头节点的位置不会变,也就是以我们一开始定义的头节点为头,新来的节点始终插入在这个头节点的前面,所以可以看到__list_add 中的操作就是将新节点插入在头节点和头节点前面元素之间。在对链表进行操作之前,首先我们需要为链表指定好链表头,以方便管理,后面的操作接口中的参数很多也是要和这个链表头有关联,在操作之前,要先定义一个。是返回头节点下一个节点的节点地址,因为头节点就是一个。原创 2023-05-22 16:37:20 · 416 阅读 · 0 评论 -
数据结构-9大排序算法代码
再按照高位排序,然后再收集;有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。和计数排序类似的就是桶排序,如果说计数排序是哈希表的线性存储,那么桶排序就是哈希表的线性存储。原创 2023-05-22 16:23:58 · 37 阅读 · 0 评论 -
数据结构-图的应用
图的应用-最小生成树图的应用-最小生成树最小生成树是带权值的无向图,把构成最小权值和连通图的生成树称为最小生成树。例如下图这是一个带权值的无向图,最小生成树就是以权值最小的代价连接所有顶点所得到的图。例如,上图使用粗线标记的路径就是最小生成树,它做到了边的权值和最小且连通了所有的顶点。普里姆算法。原创 2023-05-22 16:01:41 · 51 阅读 · 0 评论 -
数据结构-图的概述
在线性表中,数据元素是串起来的,每个元素都有且只有一个直接前驱和直接后继,所以存在线性关系,元素关系是一对一的,而在树型结构中,元素之间存在明显的层次关系,上一层的元素对应多个下一层元素,而下一层的元素只能对应一个上一层元素,就好像一个父亲可以有多个孩子,但是一个孩子只能有一个父亲,元素关系是一对多的,但是,这生活中,我们的数据之间的关系却是杂乱无章的,例如,一个车站,它可以去往多个其他车站,也有很多其他车站可以抵达这个车站,这样的关系是多对多的,而接下来我们要学习的图就是一种多对多的数据结构。 知识框架:原创 2023-05-19 18:00:33 · 223 阅读 · 1 评论 -
数据结构-哈希表
如何解决哈希冲突问题哈希表其实是一种散列表,应用散列技术将数据使用 key 值进行记录,散列技术是在记录位置和它的关键字之间建立一个确定的对应关系 f,使得每个关键字 key 对应一个存储位置 f(key)。举个例子:有 100w 个数据,它的范围是 0-99,如果使用一般的存储方法去存储或对他进行排序访问操作的话将会很复杂,这个时候我们就可以建立一个哈希表,如定义一个元素个数为 100 的数组,用数组下标表示数据的值,数组中的值表示该下标数据的个数。原创 2023-05-19 17:15:09 · 152 阅读 · 0 评论 -
数据结构-红黑树
红黑树的结构特性红黑树也是搜索树的一种,是一种弱平衡二叉树,它的出现是为了,因为 AVL 树对平衡性要求很高,所以插入和删除都需要进行平衡处理。而红黑树加入了节点颜色标志,可以减少这种强平衡要求,在一些需要频繁插入和删除的结构中经常使用。例如,C++的 STL 中的set,map,以及 linux 的虚拟内存管理都是通过红黑树去实现的。红黑树的结构特性红黑树的时间复杂度为 O(lgn)红黑树的结构定义1.红,BLACK = 1黑2.3.RED = 0;5.原创 2023-05-19 17:06:53 · 73 阅读 · 0 评论 -
数据结构-B+树
B+树和 B 树的区别B+树是 B-树的变体,也是一颗多路搜索树。一颗 m 阶的 B+树具有以下特点:1.每个结点最多有 m 个孩子。2. 非根节点关键值个数范围:⌈m/2⌉3.相邻叶子结点通过指针联系起来形成一个链表。原创 2023-05-19 15:36:26 · 573 阅读 · 0 评论 -
数据结构-B 树(B-树)
B 树的阶在学习 B 树之前,我们先了解一下 B 树是为了解决什么问题的吧,在我们之前学习的数据结构中,处理的数据都是在内存中操作,因此考虑的都是内存的时间复杂度,但是如果我们要操作的数据集非常大,大到内存没办法处理了怎么办?原创 2023-05-19 15:02:45 · 386 阅读 · 0 评论 -
数据结构-平衡二叉树(AVL 树)
不平衡处理平衡二叉树是一种二叉排序树,其中每一个节点的左子树和右子树的高度差不会大于 1。平衡二叉树的产生是为了解决二叉树的退化的,众所周知,二叉树之所以被广泛使用,因为二叉树具有良好的查找性能,但是在数据排列不合理的情况下,二树的这种性能就会得到退化,例如,以元素 35,37,47,51,58,62,73,88,93,99 去建立一颗二叉树,就会得到这样的一棵二叉树这样的二叉树就退化成一个链表,查找的最大时间复杂度变成了 O(n),显然已经违背了我们的意愿,我们希望建立的二叉树应该为。原创 2023-05-19 14:47:30 · 234 阅读 · 1 评论 -
数据结构-哈夫曼树
如何构建一颗哈夫曼树哈夫曼树是一种哈夫曼编码形成的树,是由美国数学家赫夫曼 1952 年发明的,所以也称赫夫曼编码。它是为了解决数据存储空间的问题的,压缩存储就是采用了赫夫曼编码,使得数据的存储变得更合理,这样就压缩了空间。举个例子,以下是分数的统计情况如果是正常程序来判断某个人的成绩等级时,就有但是如果把比例看作数据的权值,根据权值进行赫夫曼编码就会得到以下的树图显然这样的树图比上面的效率更高一点。如何构建一颗哈夫曼树例如,给定我们以下四个结点 ABCD,他们的权值是 1548。原创 2023-05-19 14:22:22 · 62 阅读 · 0 评论 -
数据结构-二叉树
简而言之,二叉树(Binary Tree)是一种每个结点最多有两个孩子的树,分别称为左孩子和右孩子。这样的树我们称为二叉树。二叉树的特点1.每个结点最多有两颗子树,所以二叉树中不存在度大于 2 的结点。2.左子树和右子树是有顺序的,次序不能任意颠倒。3.即使树中某一结点只有一颗子树,也要区分它是左子树还是右子树,例如下图,图一是左子树,图二是右子树,他们是不同的。原创 2023-05-18 10:31:35 · 418 阅读 · 0 评论 -
数据结构-树的概述
树的一些名词含义我们之前所谈的数据结构都是一对一的结构,例如链表,队列,栈。但是在现实中我们经常要处理这种一对多的事务,所以我们必须要学习这种一对多的数据结构—树。树(Tree)的定义是 n(n>=0)个节点的有限集。n=0 时称为空树,在任意一颗空树中:有且只有一个根节点,当 n>1 时,其余节点可分为 m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每一个集合又本身是一棵树,并且为根的字数(SubTree)。树的一些名词含义。原创 2023-05-11 14:17:08 · 44 阅读 · 0 评论 -
KMP 模式匹配算法
next 数组的推导KMP 模式匹配算法是为了解决在一个主串中去寻找子串的问题,在没有 KMP 算法之前,人们采用那种人们最容易想到的以字串按照主串从首位开始一位一位后移的方法,但是这种方法很费时间,例如下面例子:当比较到最后一位的时候,发现该段不匹配,接下来指针又要回溯到开头,开始第二个遍历,但是很明显第二个也不会存在匹配的情况,但是这种算法是无法判别的,所以就需要一种非常高效的匹配算法,于是,就衍生出了 KMP 算法,要熟悉 KMP 算法,就必须要知道模式串的 next 数组怎么推导。原创 2023-05-11 14:04:15 · 1512 阅读 · 0 评论 -
数据结构-栈和队列
栈的介绍栈和队列的思想是程序设计中很重要的一种思想,它们是对基础的线性表做一些规则限定,使其具有一定的功能。栈是限定仅在表位进行插入和删除操作的线性表,队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。栈的介绍我们把运行插入删除操作的一段称之为栈的栈顶,把另一端称为栈底,不含任意元素的叫空栈,栈又被称为的线性表,简称 LIFO 结构。栈的插入操作叫入栈或压栈,栈的删除操作叫出栈或弹栈。顺序栈的结构设计。原创 2023-05-11 10:44:33 · 49 阅读 · 0 评论 -
数据结构-线性表
线性表的顺序存储结构线性表是零个或多个数据元素的有限序列,首先线性表是一个序列,也就是说,元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他买个元素都有且只有一个前驱和后继。线性表的顺序存储结构。原创 2023-05-10 20:37:18 · 38 阅读 · 0 评论 -
数据结构与算法简介
逻辑结构和物理结构数据结构是计算机存储、组织数据的方式,从词面意义来看我们就能知道,数据结构是数据的一种组织结构,我们在程序中把数据通过各种组合方式形成的一种结构简称为数据结构,在之前我们的 c 语言学习中,我们所熟知的数组,结构体,枚举,联合体就是一类简单的数据结构,像计算机中不同图片的数据组成方式也是一种数据结构。原创 2023-05-10 09:53:32 · 54 阅读 · 0 评论