数据结构
文章平均质量分 86
数据结构学习之路
大时代1105
这个作者很懒,什么都没留下…
展开
-
排序算法(详解)
排序在日常生活中十分重要,购物平台上商品的排序,各国高校等级的排序......可以说,现代生活中已经离不开排序了;因此学好排序算法至关重要,本篇文章就来讲讲常见的排序算法排序的种类非常多,按照种类划分,有插入排序,选择排序,交换排序......,而每种排序中又分多种排序,下图是常见的排序算法。原创 2023-12-14 16:34:41 · 2280 阅读 · 5 评论 -
二叉树的链式结构
上面介绍的前序/中序/后序遍历属于深度优先遍历(DFS),准确点说前序遍历属于深度优先遍历;而层序遍历属于广度优先遍历(BFS)深度优先遍历:先访问完左子树在返回去访问右子树广度优先遍历:先访问完一层,再去访问下一层。原创 2023-12-06 16:04:05 · 1055 阅读 · 1 评论 -
TOPK问题的求解
在这片文章中我们提到,如果要在非常多的数据(内存存不下)中找到最大或最小的前K个数,我们需要先构建一个K个数的小堆或大堆;再跟堆顶数据比较。原创 2023-11-29 14:20:45 · 329 阅读 · 0 评论 -
堆排序(详解)
在上篇文章中,我们说利用堆的插入和删除也可以排序数据,但排序的只是堆里面的数组;同时每次排序数据都要单独写一个堆的实现,很不方便,这次就来着重讲讲如何使用堆排序。原创 2023-11-28 22:20:15 · 1031 阅读 · 4 评论 -
详解二叉树
前面说过,堆适合用数组存储,因此我们堆的结构就类似一个顺序表int size;//有效数据个数//容量}Heap;原创 2023-11-25 00:46:21 · 957 阅读 · 8 评论 -
栈和队列OJ题
有两个队列Queue q1;Queue q2;} MyStack;} MyQueue;int* a;int front;int back;int k;原创 2023-11-21 16:05:32 · 74 阅读 · 3 评论 -
队列的实现
因此这里用链表实现队列但用链表还有一个问题,就是每次入队时还要遍历链表找尾指针,不是很方便用双向循环链表是可以解决这个问题的,但是这里我们用另一种方法,那就是再定义一个结构体,里面存放链表的头指针和尾指针;只要每次入队后更新一下尾指针,下次入队时就能轻易找到尾同时加上一个size,用来记录当前队列的元素个数因此,我们队列结构的最优解就是:实现接口:初始化:入队:创建新结点:如果队列为空,头指针和尾指针都要指向新结点 如果队列不为空,尾指针指向新结点,更新尾指原创 2023-11-18 16:16:21 · 209 阅读 · 6 评论 -
数据结构之栈的实现
在栈中,插入数据叫做(push),删除数据叫做(pop),它们都只能在栈顶进行前面我们学了顺序表和链表两种存储结构,栈使用哪一种来实现比较好呢?我们来逐一分析首先要知道,我们的栈只能在栈顶插入和删除数据根据上面的分析,发现栈既可以用顺序表实现,也可以用链表实现,本篇文章就用顺序表来实现了。原创 2023-11-18 13:07:41 · 168 阅读 · 3 评论 -
带头双向循环链表的实现
后面的插入数据都需要建立新结点,那么干脆将建立新结点分装成一个函数,返回新结点的地址。可以看到,该代码跟单链表的头插相比,简洁了很多,并且该代码适用于空结点的情况。最后,有需要本篇文章源码的小伙伴可以去我的Gitee自行查看!实现pos位置前插入,pos位置删除两个接口。因此,前面的头插和尾插函数可以用该函数替换。因此,前面的头删和尾删可以用该函数替换。该代码同样适用于空结点的情况。原创 2023-11-17 21:20:10 · 143 阅读 · 5 评论 -
单链表的实现
可以看到,整个链表就像是用链条串起来了一样,但要注意,上图只是我们想象出来的结构,在内存中,数据之间不一定是连续的。由于打印函数不需要改变头指针,因此参数传不传二级指针都无所谓,但是为了保证接口参数的一致性,最好也传二级指针。链表属于线性表的一种,不同于顺序表,用链表存储的数据在逻辑结构上是连续的,但在物理结构(内存中)不是连续的。首先需要开辟一个结点,在后面的插入数据都需要开辟结点,因此我们分装一个函数,用来开辟结点。怎么将每个数据连接起来,我们需要定义一个结构体,一个结构体中有数据和下一个数据的地址。原创 2023-11-17 10:48:50 · 71 阅读 · 3 评论 -
顺序表的实现
静态的顺序表当空间满时,需要我们手动改变数组的大小,并且我们在使用时也不清楚未来要存多少个数据,因此会存在一定的空间浪费。顺序表是线性表的一种,在物理和逻辑上都是连续的,因为用顺序表存储的数据在内存中是连续的,简单点讲就是一个数组。当没有数据时,就不能进行删除操作了,因此要加上一个断言,当没有数据时,再进行删除操作就会报错。同头插,尾插原理相似,唯一需要注意的是,pos要在0~size之间,加上断言即可。插入4个数据时,结果没有问题,但我们还需要测试增容后的结果,再插入一个数据。原创 2023-11-15 22:25:11 · 57 阅读 · 4 评论