数据结构
文章平均质量分 88
数据结构详解
JhonKI
保持学习,保持热爱
展开
-
【数据结构】计数排序等排序
上一篇博客中详细介绍了六大常用排序包括选择、插入、冒泡、希尔、快速、堆排序这次再扩充一个计数排序并简述一下基数排序和桶排序本篇博文对计数排序等做了一个较为详细的介绍,不知道对你有没有帮助呢觉得博主写得还不错的三连支持下吧!会继续努力的~原创 2024-06-28 15:04:53 · 1382 阅读 · 43 评论 -
【数据结构】二叉树基本概念及堆的实现
通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。下面我们给出一个数组,这个数组逻辑上可以看做一颗完全二叉树,但是还不是一个堆,现在我们通过算法,把它构建成一个堆。这里我们从倒数的第一个非叶子结点的子树开始调整,一直调整到根结点的树,就可以调整成堆。因为度为0的结点没有孩子,故度为0的结点不产生边;当我们删除一个最大堆的堆顶(并不是完全删除,而是替换到最后面),经过自我调节,第二大的元素就会被交换上来,成为最大堆的新堆顶。原创 2024-05-16 21:26:03 · 875 阅读 · 20 评论 -
【数据结构】六种排序实现方法及区分比较
众所周知,存在许多种排序方法,作为新手,最新接触到的就是冒泡排序,这种排序方法具有较好的教学意义,但是实用意义不高,原因就在于它的时间复杂度太高了,为O(n^2)即便后来我们使用flag去优化它,也不过也不过少了一点,如果序列完全倒序,就没什么用。所以为了使代码运行效率更高,人们就设计了许多种排序方法,这里笔者将比较常用的六种进行介绍,并对其的一些使用情景及效率进行一下比较。默认实现时都为升序插入排序希尔排序选择排序堆排序冒泡排序快速排序。原创 2024-06-01 16:33:53 · 1423 阅读 · 30 评论 -
【数据结构】二叉树运用及相关例题
在笔者的前几篇篇博客中介绍了二叉树的基本概念及基本实现方法,有兴趣的朋友自己移步看看。这篇文章主要介绍一下二叉树的其他的几个重要功能实现方法,并对几道例题进行一个分析和解答。原创 2024-05-31 22:01:38 · 1125 阅读 · 19 评论 -
【数据结构】二叉树的功能实现
需要注意的是,如果大家在看别的博客的时候可能会遇到,他们直接使用队列的尾插功能,但其实这病不行,因为队列我们在创建时它的尾插功能的对象往往是队列的结构体,如果直接将其用来放入二叉树的层序遍历功能中,会出现bug。另外加一嘴,因为我们创建的二叉树是一个一个节点创建的,所以我们为了避免内存泄漏,最后也是需要通过递归一个一个释放,这里我们可以通过函数递归一直找到叶子节点,往上一个一个释放,即。通过这种数据结构,我们将每次提取出来的节点放到队列的末尾,这样最后输出的队列,从头往后就是二叉树的层序遍历。原创 2024-05-24 23:17:49 · 962 阅读 · 17 评论 -
【数据结构】利用顺序表实现通讯录
这篇文章实现的通讯录利用了笔者上一篇写的有关顺序表的应用,需要用的朋友自行复制。原创 2024-04-05 21:45:24 · 760 阅读 · 27 评论 -
【数据结构】有关环形链表题目的总结
如果有环的话,创建两个指针,一个指针从head节点开始,另一个指针从相遇点meet开始,两个指针每次都走一步,两个指针相遇的点就是链表入环的第一个节点。关于这道题,大家可以利用快慢指针,一个每次走两步,一个每次走一步,只要他们有一次相撞了就代表说这是一个链表。这是快指针步数为3的情况,为4,为5的讨论情况也差不多这样,无非就是再讨论一下,这里就不赘述了。的总长度是不会变的,变得只是快慢指针之间的距离,如果在进行一次循环我们可以将。为奇数的话,就会导致最后快指针比慢指针多走了一步,这就会导致,追不上吗,原创 2024-05-06 21:39:26 · 1185 阅读 · 42 评论 -
【数据结构】栈详解
文章目录对栈的理解栈的实现 - 基于哪种常见类型演变而来的栈的基本实现栈实现总体代码对栈的理解栈的特点:先进后出。入栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈,出数据也在栈顶。我们可以看出羽毛球桶,先放进去的羽毛球后拿出来,后放进去的羽毛球先拿出来,为了更好的理解进栈和出栈,笔者这里用简图表示一下意思就是说,栈你如果要拿出一个,就是先拿出来后放进去的,要拿出来以前放进去的,就必须把后面放进去的全部拿出来才行栈的实现 - 基于哪种常见类型演变而来原创 2024-05-08 23:21:55 · 1182 阅读 · 13 评论 -
【数据结构】有关栈和队列相互转换问题
整个队列实现栈的操作中最难理解的就是尾插和尾删的联系与衔接,这两者的关系一旦理清,别的就是信手拈来,这里笔者就不赘述了,跟栈的原始操作大同小异,代码就放在下面了。关于用栈实现队列,我们要做的不同方向是,利用两个栈实现,这两个栈不想上面一样,通过判空来使用,而是直接进行分区,一个用来输入,一个用来输出。,关于尾删,我们的想法应该是利用队列中带有的尾插操作,将有数据的队列的数据一个个传到空队列中,最后一个传出的数据就是我们要删的数。此时我们需要做的是利用队列中自带的取队头数据操作,就可以获得栈所需的栈顶元素,原创 2024-05-13 15:55:33 · 967 阅读 · 22 评论 -
【数据结构】单链表
在笔者之前的文章中提到过顺序表,但是顺序表存在许多缺陷,比如说在中间或头部插入低下(要进行循环,将后面元素后移),一旦增容会降低运行效率、增容造成空间浪费等,因此,链表应运而生,可以刚好填补上上述三个缺点。原创 2024-04-09 22:42:42 · 1340 阅读 · 1 评论 -
【数据结构】顺序表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。所以我们可以认为顺序表是一种高级的数组,一种封装了一些功能的数组,实现了常用的增删改查等接口静态顺序表它只有两个成员,缺点是数据长度定死,没有灵活性这里我们看到第一行有一行代码。原创 2024-04-03 23:18:09 · 721 阅读 · 24 评论 -
【数据结构】队列详解(Queue)
联想一下链表,在单链表中,只能对表尾进行插入,对表头进行结点的删除,这样强限制性的链表,就是所说的队列。队列是一个线性的数据结构,并且这个数据结构只允许在一端进行插入,另一端进行删除,禁止直接访问除这两端以外的一切数据,且队列是一个先进先出的数据结构。队列只有链式的设计方法,其本身分为多种队列,如顺序队列和循环队列,还有衍生的优先队列等等,以顺序队列的设计为例。两者的区别仅是顺序表和链表的区别,即在实际的物理空间中,数据集中存储的队列是顺序队列,分散存储的队列是链队列。主要的操作只对这两个指针进行操作。原创 2024-05-10 21:54:50 · 1299 阅读 · 43 评论