
数据结构
文章平均质量分 89
分为两大类,初阶部分和高阶部分,详细介绍相关知识及代码案例,并穿插相关算法题目的讲解
云边有个稻草人
支付宝开发者社区优秀季度创作博主,腾讯云创作之星,AWS 认证人工智能从业者,极星会KOL
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数据结构初阶第十九节】八大排序系列(下篇)—[详细动态图解+代码解析]
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;⾸先从右向左找出⽐基准⼩的数据,找到后⽴即放⼊左边坑中,当前位置变为新的"坑",然后从左向右找出⽐基准⼤的数据,找到后⽴即放⼊右边坑中,当前位置变为新的"坑",结束循环后将最开始存储的分界值放⼊当前的"坑"中,返回当前"坑"下标(即分界值下标)计数排序又称为鸽巢原理,是对。原创 2025-03-15 10:58:55 · 1807 阅读 · 68 评论 -
【数据结构初阶第十八节】八大排序系列(上篇)—[详细动态图解+代码解析]
冒泡排序代码见下时间复杂度为O(N^2),空间复杂度为O(1)原创 2025-03-08 18:52:01 · 1966 阅读 · 111 评论 -
【数据结构初阶第十七节】二叉树算法题
正文开始——接受挑战!原创 2025-03-01 12:24:22 · 1801 阅读 · 90 评论 -
【数据结构第十六节】实现链式结构二叉树(详细递归图解—呕心沥血版!)
必须有为成功付出代价的决心,然后想办法付出这个代价。这节课挺抽象(苦笑),没事,我会帮你!干就完了!正文开始——引言用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是,左右指针分别用来给出二叉树的创建方式比较复杂,为了更好地步入到二叉树内容中,我们先手动创建一棵链式二叉树。回顾二叉树的概念,二叉树分为和,非空二叉树由组成的。根节点的左子树和右子树分别又是由子树节点、子树结点的左子树和子树结点的右子树组成的,因此二叉树是的,后序链式二叉树的操作基本都是按照概念实现的。一、前中后序遍历。原创 2025-02-24 17:50:28 · 2904 阅读 · 101 评论 -
【数据结构初阶第十五节】堆的应用(堆排序 + Top-K问题)
我们根据节点数来计算交换的次数,我们知道 2^k -1 = n(n为总结点的个数),k = log(n+1) -> k = log(n),这只是插入一个结点,若要插入m个结点,就是m*log(n)次,因为向下调整算法也是这样,所以加起来就是O(2*m*log(n)),也就是O(m*log(n)),这只是大致计算一下时间复杂度。时间复杂度为:我们采用向下调整算法建堆,时间复杂度为O(K),之后将N-K个数据进行向下调整,时间复杂度为(N-K)log(K) ,加在一起将小的忽略就是O(N)。原创 2025-02-22 19:30:15 · 1802 阅读 · 94 评论 -
【数据结构初阶第十二节】设计循环队列
必须有为成功付出代价的决心,然后想办法付出这个代价。还有最后一道关于队列的习题,这题有点难,准备好迎接挑战吧!这题得多画图理解,不能空想,而且要结合我写代码中穿插的注释,这样就会好理解点。原创 2025-02-19 15:10:51 · 1491 阅读 · 41 评论 -
【数据结构初阶第十节】队列(详解+附源码)
好久不见。。。别不开心了,听听喜欢的歌吧必须有为成功付出代价的决心,然后想办法付出这个代价。这节课我们学习队列的概念和结构以及实现,需要提前具备前面顺序表和链表的相关知识,这样这节课就会变得非常简单!原创 2025-02-13 20:19:04 · 1720 阅读 · 120 评论 -
【数据结构初阶第九节】深度理解 “栈” (附源码)
栈的概念与结构、初始化、销毁、入数据、取数据、获取栈中有效元素的个数、出栈原创 2024-08-03 09:23:43 · 1846 阅读 · 50 评论 -
【数据结构初阶第十四节】二叉树--堆(顺序结构实现)
新插入的数据作为子结点(child),找到新插入数据的父结点(parent=(child-1)/ 2)(上面二叉树的性质),父结点和子结点进行比较,若父结点大于子结点,数据交换,不大于则不交换。如果有一个关键码的集合K={k1,k2,,k3,...,k(n-1)},把它的所有元素按完全二叉树的顺序存储方式存储,在一个一维数组中,并满足:Ki = K(2*i+1) 且 Ki >= K(2*i+2)),i = 0,1,2...,则称为小堆(或大堆)。大堆:父结点不小于孩子结点。原创 2024-09-01 20:23:30 · 2434 阅读 · 68 评论 -
【数据结构初阶第十三节】二叉树--基本概念
对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统模拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。通俗点来讲,假设二叉树层次为k,除了第k层之外,每层结点的个数都达到了最大结点数,第k层结点个数不一定达到最大结点数,完全二叉树结点的顺序是从左到右的。一个结点含有的子树的根结点称为该结点的子结点,;原创 2024-08-19 17:30:04 · 3710 阅读 · 105 评论 -
【数据结构初阶第十一节】队列经典习题两道
用队列实现栈,用栈实现队列原创 2024-08-14 20:55:06 · 851 阅读 · 41 评论 -
【数据结构初阶第八节】千字文章带你征服 “ 双向链表 ”(附源码)
初始化,尾插,头插,尾删,头删,删除指定位置的结点,删除pos结点之后的结点,销毁,查找,打印,顺序表和链表的比较原创 2024-07-31 17:33:28 · 1792 阅读 · 58 评论 -
【数据结构初阶第七节】单链表经典算法题十道(详解+图例)—得道飞升(终篇)
环形链表(图解)、随机链表的复制(图解)原创 2024-07-29 00:21:18 · 888 阅读 · 47 评论 -
【数据结构初阶第六节】单链表经典算法题十道(详解+图例)—得道飞升(中篇)
创建新数组,遍历原链表,将链表中的值放到数组中,然后在数组中判断是否为回文结构。在链表中不可回找,但是数组可以回找,所以我们可以把链表中的数据放到数组中。3)从原链表的头结点和新链表的头结点开始遍历比较。1)找原链表的中间结点,“快慢指针”;2)将中间结点及之后的结点进行反转;原创 2024-07-28 09:54:27 · 862 阅读 · 37 评论 -
【数据结构初阶(第一节)】复杂度
算法效率、时间复杂度、空间复杂度、常见举例、常见复杂度对比原创 2024-07-17 13:04:52 · 1341 阅读 · 17 评论 -
【数据结构初阶(第二节)】顺序表
线性表、顺序表、静态顺序表、动态顺序表原创 2024-07-18 00:37:08 · 1757 阅读 · 21 评论 -
【数据结构初阶第三节】顺序表三道经典算法题(详解+图例)
通过把 src 指向的不等于 val 的数赋给 dst 指向的位置,实现把不等于 val 的数放到前面,而且刚好 dst 的值就是数组中不等于 val 的数据的个数,同时要注意循环的条件。通过 src 遍历数组,如果与 dst 指向的数据相等就跳过,不相等就先 dst++,再赋给 dst 指向的位置,限制条件 src原创 2024-07-20 15:27:29 · 1024 阅读 · 41 评论 -
【数据结构初阶(第四节)】一篇文章带你超深度理解【单链表】
前面我们学习了顺序表,实现了对数组内容增删查改等操作,但是顺序表仍然存在一些缺陷。中间/头部的插入删除,时间复杂度为O(N);增容需要申请新空间,拷贝数据,释放旧空间,这是不小的消耗;增容一般是成2倍的增长,大概率会有一些空间的浪费。那我们该如何解决上面的问题呢?下面我们来学习一下链表。1、链表的概念和结构链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现。2、链表(Single List,简写SList)的实现。原创 2024-07-24 20:57:53 · 2106 阅读 · 49 评论 -
【数据结构初阶(第五节)】单链表经典算法题十道(详解+图例)—得道飞升(上篇)
创建一个新链表,newhead,newtail 指向新链表的头结点,定义两个指针分别指向原链表的头结点,两个指针指向的数据比较大小,谁小谁尾插到新链表里面。在实例中,最后一个5结点被尾插到新链表中时,5结点的next指针指向的仍然是后面的6结点,所以最后返回的时候结果里面含有6,所以我们把最后一个等于val结点的next指针指向NULL即可!慢指针每次走一步,快指针每次走两步,当快指针走到链表的尾结点时,假设链表的长度为n,快指针走的路程是慢指针的两倍,2*慢=快,即慢指针走的路程是n/2。原创 2024-07-26 00:34:47 · 1783 阅读 · 44 评论