数据结构
文章平均质量分 66
绅士·永
不忘初心
展开
-
<数据结构>AVL树详解
AVL树又叫平衡树(Balance_Tree),笔者认为这个名字非常不错,中国嘛,就是在意阴阳平衡,之前小编还拿这个当过自己网络IP,哈哈哈。原创 2023-08-28 18:59:15 · 391 阅读 · 0 评论 -
<高阶数据结构>图
我们只需借助一个队列来辅助实现,这里我们先将A入队列,在A出队列的时候,将A连通的最近一层B,C,D入队列,B出队列时将E入队列,如此运行直到队列为空时,遍历结束,出队列顺序即时我们的遍历次序。从某一顶点开始,选择该顶点连接的边中权值最小的边,再到下一顶点选连接的边中最小权值的边,同样需要记录一下已经选过了的顶点。借助一个队列实现,和广度优先遍历方法有点类似,只不过这里只需要选择最小权值边的顶点。为了防止B出队列时,再次将A和C入队列,可以开一个标记容器,标记入了队列的顶点。组成:G = (V, E)原创 2023-08-28 15:57:31 · 179 阅读 · 0 评论 -
<数据结构>并查集
上面我们把十个人分为了不同几个小组,他们来自不同的地方,吃的口味自然不同,于是就分别让0,1,2这三个人担任组长,带领各自的队伍去吃饭。并查集和堆一样,都是通过数组来实现树的节点映射,不过并查集作用是,把一堆数据分为不同的几个小集合。不过并查集是森林的概念,并查集的学习可以帮助我们去更好的学习图这个数据结构。2.如果该结点是双亲结点,存放一个负数,我们可以顺便存放这棵树的结点个数。我们只需要将整个数组遍历一遍,找到为负数的位置有多少个,即集合的数量。队长可以抽象的理解为头结点,组员理解为各自的孩子结点。原创 2023-07-16 16:17:04 · 536 阅读 · 0 评论 -
常见的七大排序
排序来啦原创 2022-06-28 10:01:29 · 510 阅读 · 5 评论 -
LeetCode_142.环形链表 II
目录一、题目二、思路三、代码一、题目题目链接:142. 环形链表 II - 力扣(LeetCode)题目描述:假设给定一个链表的头节点 head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行...原创 2022-05-30 17:46:57 · 114 阅读 · 5 评论 -
LeetCode_101.对称二叉树
目录一、题目二、思路三、代码一、题目题目链接:101. 对称二叉树 - 力扣(LeetCode)题目描述:给你一个二叉树的根节点 root , 检查它是否轴对称。二、思路由示例可以看出其结构是镜像对称:我们需要检测左右两边是否对称我们可以将其分解两个树:左子树、右子树再将左子树的左子树和右子树的右子树进行比较,左子树的右子树和右子树的左子树进行比较是否相等如果最后比较到NULL都相等,就返回true三、代码// 分解子树.原创 2022-05-30 15:02:46 · 132 阅读 · 0 评论 -
LeetCode_100_相同的树
目录一、题目二、思路三、代码一、题目题目链接:100. 相同的树 - 力扣(LeetCode)题目描述:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。二、思路我们需要判断两颗树是否相同,分治的思想,(模范前序),先判断根节点相不相同,再判断左子树相不相同,再判断右子树相不相同。如果访问到NULL节点,说明前面的一定都相同,为true,否则就f.原创 2022-05-29 20:50:29 · 106 阅读 · 0 评论 -
<数据结构>树和二叉树
目录一、树的概念1.1.树的相关概念1.2.树的表示1.3.树的应用(表示文件系统的目录结构)二、二叉树的概念2.1.概念2.2.现实的二叉树2.3.特殊的二叉树2.4.二叉树的性质2.5.二叉树的存储结构2.5.1.顺序存储2.5.2.链式存储一、树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。(就是将现实的树倒过原创 2022-05-28 21:14:15 · 149 阅读 · 0 评论 -
<数据结构>堆和堆排序
目录一、堆的概念及结构二、堆的实现2.1.堆向下调整算法2.2.堆的创建2.3.建堆时间复杂度2.4.堆的插入2.5.堆的删除三、堆的应用3.1. 堆排序3.2. TOP-K问题一、堆的概念及结构如果有一个关键码的集合K = { , , ,…, },把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中,并满足: = 且 >= ) i = 0,1, 2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆原创 2022-05-25 16:59:28 · 314 阅读 · 6 评论 -
<数据结构>队列
目录一.队列的概念及结构二.队列的实现1.1.基本结构2.1.Queue.h2.2.Queue.c2.3.test.c一.队列的概念及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头二.队列的实现1.1.基本结构队列一般采用链表来实现2.1.Queue.h.原创 2022-05-19 19:52:32 · 114 阅读 · 0 评论 -
<数据结构>栈
目录1.栈的概念及结构1.栈的实现2.1Stack.h2.2Stack.c2.3.test.c1.栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶1.栈的实现栈的实现一般可以使用数组或者原创 2022-05-15 20:14:55 · 99 阅读 · 0 评论 -
牛客_OR36 链表的回文结构
一、题目题目链接:链表的回文结构_牛客题霸_牛客网 (nowcoder.com)对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。测试样例:二、解题思路先找到中间节点:然后再将在中间节点后面的节点逆置:然后再将逆置后的节点和原链表开始同时比较遍历。bool chkPalindrome(ListNode* A) ..原创 2022-05-06 19:26:31 · 434 阅读 · 0 评论 -
牛客_CM11 链表分割
目录一、题目二、解题思路三、解题代码一、题目题目链接:链表分割_牛客题霸_牛客网 (nowcoder.com)现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。二、解题思路注意每在连接一个节点后需要将尾的next置空,否则在连接时可能会出现没有尾的情况 // 分割尾插节点 while (cur)原创 2022-05-06 19:09:08 · 407 阅读 · 0 评论 -
LeetCode_160.相交链表
目录一、题目二、解题思路三、代码实现一、题目题目链接:160. 相交链表 - 力扣(LeetCode) (leetcode-cn.com)给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null二、解题思路首先需要判断两链表是否是相交的,即两链表的最后一个结点是否相同。struct ListNode* curA = headA; struct ListNode*.原创 2022-05-06 18:49:40 · 390 阅读 · 0 评论 -
LeetCode_189.轮转数组
目录一、题目二、解法1)BF法2)新数组3) 逆置法一、题目给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。题目链接:189. 轮转数组 - 力扣(LeetCode) (leetcode-cn.com)二、解法1)BF法即最暴力的解法:时间复杂度O(N^2) 空间复杂度O(1)// BF法 时间复杂度O(N^2) 空间复杂度O(1)void rotate01(int* nums, int numsSize, int k)原创 2022-04-23 22:49:54 · 1866 阅读 · 3 评论 -
LeetCode_9_删除链表的倒数第 N 个结点
一、题目给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。如下图:(来自LeetCode刷题网)二、思路图解1.找结点题目给出的单链表的题型:他要求我们删除倒数第N个结点,但是单链表的特性是无法进行反向遍历的,所以我们只能通过正向遍历来找到我们所需要删除的结点,将问题从删除倒数第N个结点转化为删除正数第N个结点。2.一个结点当待删除的结点3.多个结点三、代码实现...原创 2022-03-15 13:21:41 · 1858 阅读 · 7 评论 -
双链表详解
目录一.双链表的定义二.要实现的功能三.功能实现0、创建结点1、初始化2、打印3、尾插4、尾删5、头插6、头删7、任意插入8、任意删除9、查找四.全部代码的实现1、text.c2、List.c3、List.h一.双链表的定义由图这就是一个双链表,可以看出它是一个由尾和头双向指向的环,且每个结点之间都是双向指向的。二.要实现的功能双链表是一种数据结构,所谓数据结构就是用来储存数据的工具,功能大致就和基本储存数据的原创 2022-02-15 16:07:39 · 6110 阅读 · 16 评论 -
刷题之:反转链表
目录一、函数接口1、三指针法2、头插法二、图解思路1、三指针法2、头插法三、代码实现1、三指针法2、头插法一、函数接口1、三指针法接口的根据自己的需要设立,可以不返回,可以返回。void CSList(SListNode** phead)2、头插法struct SListNode* reverseList(struct SListNode* phead)二、图解思路1、三指针法其解题的核心是三个指针之间.原创 2022-02-05 19:30:48 · 607 阅读 · 11 评论 -
单链表详解
一、什么是链表数据结构就是用某种结构去储存数据:1、物理结构(数据在内存中的存储)2、逻辑结构(由人为想象出来的)顺序表就是逻辑和物理都连续的一种线性表。链表就是逻辑连续,物理不一定连续的线性表。如下图,逻辑上是利用指针将其串联起来的,物理上却是杂乱的。...原创 2022-01-31 14:31:07 · 3180 阅读 · 7 评论 -
刷题之:找数组中只出现一次的两个数
示例:int arr[] = { 1,1,2,2,3,3,4,5,5,6,7,7,8,8,9,9 }; 题目: 在数据成对出现的数组中又两个数值只出现了一次,将这两个数值找出来。思路如上面的示例,我们需要将4,6这两个只出现一次的数值找到。明显过程较为复杂,我们采用函数包装。函数设计我们需要清楚函数的参数,返回类型是什么?需要处理的是一个数组,采用指针/数组传参,传数组的元素个数;我们需要返回两个数,所以需要返回一个数组,即一个地址,采用整形指针类型。int* si原创 2022-01-25 07:47:25 · 6212 阅读 · 12 评论