![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 60
RXY24601
life is a struggle
展开
-
树--有子树相同
树,二叉树实现判断另一棵树中是否有相同的树结构原创 2022-11-25 17:41:35 · 168 阅读 · 0 评论 -
线性表--合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的原创 2022-09-07 18:35:08 · 1500 阅读 · 1 评论 -
线性表--去重算法
思路由画图可知,设置两个指针,一个用于保存数组,另一个用于向后查找不同数字。如果相同那么j++,不相同则先给i++,将nums[i]赋值,保存数据,再将j++。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。的前五个元素被修改为 0, 1, 2, 3, 4。不需要考虑数组中超出新长度后面的元素。不需要考虑数组中超出新长度后面的元素。函数应该返回新的长度 5 , 并且原数组。函数应该返回新的长度 2,并且原数组。,返回删除后数组的新长度。删除重复出现的元素,使每个元素。原创 2022-10-31 20:29:53 · 326 阅读 · 0 评论 -
复杂度--消失的数字
第一个循环将数组中的所有元素异或再ret中,将ret在于0--n的元素异或,其中重复的元素异或后为0,只剩下单独的一个元素没有配对,即为消失的数字。将数组中的元素与0--n的元素异或,最后剩下的异或后值为消失的数字。对0-n的数字求和,再减去数组元素和,最后剩余值为消失的数字。异或:相同为0,相异为1。的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。时间复杂度:O(n)空间复杂度:O(1)原创 2022-10-24 15:40:25 · 80 阅读 · 0 评论 -
树--二叉树的最大深度
计算二叉树的深度首先需要对比左子树与右子树的深度,如果左子树深度>右子树深度,那么接下来的遍历就从左子树开始。同时在每一次遍历的结束后,需要返回这一次计算深度的值,并且累加。语句在每一次递归调用的时候都需要重复计算左子树与右子树的深度,导致运算时间累计过长。所以设置变量保存每一次调用后计算出的左子树深度与右子树深度。以上程序对一般的树来说可以满足计算深度,但当树的结点数量极大时,会超出运行时间限制,也就是说这个遍历算法的计算深度效率不够高。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。原创 2022-10-13 15:15:10 · 87 阅读 · 0 评论 -
栈与队列--用栈实现队列
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。由于栈的先进后出原则与队列的先进先出原则,所以采用两个栈来实现队列的进出功能,设置栈L1作为队列的进入实现,设置栈L2作为队列的弹出实现。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。请你仅使用两个栈实现先入先出队列。由于我在栈的实现中将栈顶初始值设置为0,所以top指向栈顶元素的下一个能插入的地方。原创 2022-09-24 09:57:18 · 147 阅读 · 0 评论 -
线性表--查找链表的中间值
链表取中间值原创 2022-09-07 09:35:29 · 510 阅读 · 0 评论 -
树--计算二叉树节点个数
设置全局函数size解决了局部变量无法保存的数据,却导致函数体无法连续多次调用,因为全局函数会记录size的数值,如果不置零后再调用,会显示累加结果。首先,树的遍历从根节点开始,依次向子节点递进,重复工作,所以采用递归的方式实现节点数量的计算。如上图所示的代码块无法实现统计节点个数的功能,因为size为局部变量,超出函数实现范围后会销毁。这样无法实际统计节点个数,因为size为局部变量,无法累计。最粗暴的方式解决这个问题就是将size设置为全局函数。同理,有了计算节点个数的前例,可以自己写出类似的。原创 2022-10-18 16:25:38 · 2970 阅读 · 0 评论 -
数据结构--后缀表达式
实现后缀表达式原创 2022-09-23 09:26:39 · 9534 阅读 · 0 评论 -
线性表--相交链表
给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。— 请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。原创 2022-11-08 09:14:32 · 123 阅读 · 0 评论 -
递归--实现线性表搜索指定关键字值的元素
【代码】递归--实现线性表搜索指定关键字值的元素。原创 2022-10-08 15:37:04 · 517 阅读 · 0 评论 -
树--复制二叉树
否则①申请新节点空间,复制根节点②递归复制左子树③递归复制右子树。如果是空树,递归结束。原创 2022-10-18 15:34:21 · 1413 阅读 · 0 评论 -
树--树的轴对称翻转
给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。原创 2022-11-28 17:01:30 · 111 阅读 · 0 评论 -
递归--实现数组求最大值与平均值
这里的思路通过设置prev与last用于标记数组的位置,通过a[prev]>a[last]对比,保存更大的数据,并且不断重复这一操作。如果a[prev]原创 2022-10-08 15:32:10 · 302 阅读 · 0 评论 -
树--先序遍历构建二叉树
需要在先序序列中用特殊字符补充空节点,使二叉树的建立唯一。从键盘输入二叉树的节点信息,建立二叉树的存储结构。当只有一个先序序列的时候无法确定为一个一颗二叉树。在建立二叉树的过程中按照二叉树先序方式建立。按照先序遍历序列建立二叉树的二叉链表。原创 2022-10-18 14:52:44 · 3423 阅读 · 2 评论 -
树--单值二叉树
单值二叉树的实现原创 2022-11-24 19:31:25 · 165 阅读 · 0 评论 -
树--平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。truefalseroot = []true如果是直接采用计算树深度进行对比,无法满足题目要求,树内的每一个结点的每一个子树都必须满足平衡条件abs。原创 2022-10-15 16:19:41 · 68 阅读 · 0 评论 -
线性表--环形链表
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。原创 2022-09-07 19:00:50 · 453 阅读 · 0 评论 -
栈与队列--利用队列将栈中元素逆置
由于栈先进后出的特性与队列先进先出的特性,所以只需要将栈中元素储存在队列中后,在把队列中的元素储存会栈中。原创 2022-10-08 15:28:15 · 3018 阅读 · 0 评论 -
线性表--删除顺序表中为x的元素
顺序表删除指定元素原创 2022-09-07 08:52:29 · 2804 阅读 · 0 评论 -
树--相同的树
判断两个树,是否形状,关键字值都完全相同原创 2022-11-24 20:03:22 · 55 阅读 · 0 评论 -
线性表--倒数第k个节点
输入一个链表,输出该链表中倒数第k个结点。原创 2022-11-04 14:24:10 · 72 阅读 · 0 评论 -
复杂度--旋转数组
给你一个数组,将数组中的元素向右轮转k个位置,其中k是非负数。向右轮转 1 步:[7,1,2,3,4,5,6]向右轮转 2 步:[6,7,1,2,3,4,5]向右轮转 3 步:[5,6,7,1,2,3,4]向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]原创 2022-10-24 14:33:40 · 74 阅读 · 0 评论 -
树--二叉树的前序遍历
如果采用定义一个全局变量i,当只有一个结点的时候会出现内存越界。因为在多个测试用例的前提下,PrevOrder函数会被重复多次调用,全局变量i会记录每一次调用的累加值,必须要在每一次调用之前将全局函数i置零,才能保证每一次记录的i都是从0开始的。在PrevOrder函数实现的过程中,由于是函数递归,所以为了利用i来给数组a赋值,每个函数内都有一个i,必须要用指针*i记录才能完成。所以下面这种实现方式在单个用例的测试中无问题,但多次测试就会报错。原创 2022-10-12 18:21:48 · 368 阅读 · 0 评论 -
堆--TopK问题
在N个数中找出最大/小的前K个比如在1000个数中找出最大的前10个数字。原创 2022-11-12 10:30:53 · 538 阅读 · 0 评论 -
栈与队列--用队列实现栈
为了实现栈顶数据的删除,将队列1中的非末尾数据依次保存在队列2中,使得队列1中只剩最后需要删除的元素,即栈顶元素。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(同理,如果想删除数字4,则将123保存至队列1,后将队列2中的4删除。当有一个队列存入元素,此后所有的元素都存入这个队列中。由于栈的原则为后进先出,而队列的进出原则为先进先出。当两个队列都为空时,可将元素存入任意一个队列中。int pop() 移除并返回栈顶元素。插入数据则将数据插入至有数据存放的队列。原创 2022-09-19 18:30:29 · 115 阅读 · 0 评论 -
线性表--复制带随机指针的链表
给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。深拷贝应该正好由n个节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的next指针和random指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。。例如,如果原链表中有X和Y两个节点,其中。那么在复制链表中对应的两个节点x和y,同样有。返回复制链表的头节点。用一个由n个节点组成的链表来表示输入/输出中的链表。原创 2022-11-09 17:05:41 · 155 阅读 · 0 评论 -
栈与队列--循环队列
设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。FrontReardeQueue()isEmpty()isFull()// 设置长度为 3// 返回 true// 返回 true// 返回 true。原创 2022-11-17 14:30:07 · 192 阅读 · 0 评论 -
栈与队列--中缀表达式转后缀表达式
②若取出的字符是运算符 ( * / - +),则将该运算符与S1栈顶元素比较,如果该运算符(不包括括号运算符)优先级高于S1栈顶运算符(包括左括号)优先级,则将该运算符进S1栈,否则,将S1栈的栈顶运算符弹出,送入S2栈中,直至S1栈栈顶运算符(包括左括号)低于(不包括等于)该运算符优先级时停止弹出运算符,最后将该运算符送入S1栈。④若取出的字符是“)”,则将距离S1栈栈顶最近的“(”之间的运算符,逐个出栈,依次送入S2栈,此时抛弃“(”。③若取出的字符是“(”,则直接送入S1栈顶。操作符栈内外优先级表。原创 2022-09-27 17:09:57 · 343 阅读 · 0 评论 -
线性表--分割链表
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。同时需要考虑如果所有数字都大于x的情况,也就是所有节点都在存储大数据的链表上,因此采用带有哨兵位的链表更方便插入。这里由于需要考虑到不改变原来的数据顺序,所以先在堆区开辟两块空间,也就是两个链表。最后遍历完原链表的所有节点,将存储大数据的链表尾插在存储小数据的链表上。一个链表用于存储小于x的数据,另一个链表用于存储大于x的数据。原创 2022-11-07 14:04:16 · 582 阅读 · 0 评论 -
树--对称二叉树
实现二叉树的轴对称判断原创 2022-11-27 14:57:57 · 641 阅读 · 0 评论 -
线性表--反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。原创 2022-09-05 19:29:09 · 661 阅读 · 1 评论 -
线性表--回文链表
首先想到的想法是设定一个头指针一个尾指针,依次对比两个指针所指向节点对应的值。其次通过回文的中心对称的特性,可以通过找中间值进行操作。为了满足单链表前向后单向性的特点,所以再将后部的链表进行翻转。对于一个链表,请设计一个时间复杂度为O(n), 额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。如“abba”、“abccba”、12321、123321是“回文”回文指正读和反读都相同的字符序列为“回文”OR36 链表的回文结构。原创 2022-11-07 19:05:27 · 127 阅读 · 0 评论 -
栈与队列--迷宫寻路
随后在上下左右四个方向中选择可以行进的路径,到达新位置后如果未到达终点且不能再移动,则递归函数返回false,也就是将位置返回上一级判定,直至返回值有其他方向可走的位置。思路1:先判断能那个位置可以走,栈内储存做选择位置的坐标,如果选择过后出现死路径,则跳转回记录的选择位置的坐标,重新选择路径,往回走的方式就叫做回溯,采用最大深度泛式。输入描述:输入两个整数,分别表示二位数组的行数,列数,再输入相应的数组,其中的1表示墙壁,0表示可以走。数据保证有唯一解,不考虑有多解的情况,即迷宫只有一条通道。原创 2022-09-27 17:26:13 · 1129 阅读 · 0 评论 -
栈与队列--有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。当获取字符串中的元素为左括号时,将其存入栈中,方便与后续入栈元素对比。传入元素为右括号时,如果栈顶元素与其不匹配,则整个字符串为false。这里采用栈的方式,将字符串元素依次传入栈中,并在站内将元素进行匹配。代码首先需要栈对队列的接口函数,从而方便函数的实现。每个右括号都有一个对应的相同类型的左括号。左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。原创 2022-09-15 10:02:55 · 149 阅读 · 0 评论 -
数据结构基础--排序
排序:直接插入排序,希尔排序,堆排序,选择排序,冒泡排序,归并排序,快速排序原创 2022-12-16 19:17:32 · 403 阅读 · 0 评论 -
数据结构基础--图
图,包括图的定义,两种形式,遍历,AOE网,AOV网,最短路径,拓扑排序原创 2022-12-09 16:36:11 · 2688 阅读 · 0 评论 -
数据结构基础--散列表
散列表:包括冲突解决办法,散列函数原创 2022-12-20 12:56:20 · 5346 阅读 · 0 评论 -
数据结构基础--搜索树
包括:二叉搜索树,平衡二叉树,m叉搜索树,B-树原创 2022-11-13 20:14:31 · 1430 阅读 · 1 评论 -
数据结构基础--堆(优先权队列ADT)
堆的基础认识、向上调整和向下调整,以及建堆运算原创 2022-11-10 21:15:11 · 523 阅读 · 0 评论