
JAVA数据结构
文章平均质量分 59
Java数据结构初级、高阶、刷题的一些记录
purrrew
一个妄想主义者
展开
-
【数据结构_10】二叉树(2)
思路:如果我们想要获得第k层节点的个数,如果k<1,这是非法的输入,如果k=1,也就是求第一层节点的个数,而非空的树第一层的节点个数也就是1。2.拿着根节点在中序中进行查找,查找规则:在中序遍历中,左子树就在根节点左侧,右子树就在根节点右侧,拿着根节点E,在中序结果中进行查找。3.先序中,如果明确了根节点和子树范围,此时,子树范围对应的内容就是子树的先序结果(后序也是类似,子树对应的内容就是子树的后序结果)2.在中序遍历中,左子树就在根节点左侧,右子树就在根节点右侧,拿着根节点E,在中序结果中进行查找。原创 2025-04-18 23:49:33 · 440 阅读 · 0 评论 -
【数据结构_10】二叉树(1)
树是一种非线性的数据结构,是由n个有限节点组成一个具有层次关系的集合。树的每个节点能够延伸出多个子节点,但每个子节点只能由一个父节点。树形结构中,子树之间不能有交集,否则就不是树形结构。原创 2025-04-17 20:57:56 · 660 阅读 · 0 评论 -
【数据结构_9】栈和队列
队列 Queue 一个方向进,一个方向出Queue队列提供的核心方法:入队列:offer add出队列:poll remove取队首元素: peek element前面一列发生错误是返回null 后面一列发生错误时抛出异常Queue是否能够使用isEmpty()/size 等这样的方法呢?答案:是可以的,因为Queue接口继承自Collection接口,而Collection接口实现了这一系列方法。原创 2025-04-16 17:19:00 · 1056 阅读 · 0 评论 -
【数据结构_6下篇】有关链表的oj题
空间复杂度为O(1),时间复杂度为O(N)(*考虑极端情况,比如环的长度就是整个链表长度N,fast和slow最开始上环的时候,差距是N,此时意味着,每循环一次,差距就措施小N,最多经过N次就重合了)创建cur1从交汇位置出发,创建cur2从链表的头部出发,每次循环走一步的方式,同时往后走,当cur1与cur2重合,此时相遇的位置,就相当于环的入口。反例:fast一次走3步,slow一次走1步,环的长度为2,这样的情况下,fast和slow是永远也重合不了的,这和环的长度是有关系的。原创 2025-04-12 10:51:46 · 956 阅读 · 0 评论 -
【数据结构_6】双向链表的实现
一、实现MyDLinkedList(双向链表)原创 2025-04-13 20:08:21 · 377 阅读 · 0 评论 -
【数据结构_8】栈和队列
4.pushA遍历完毕之后,如果栈为空,说明当前的结果就是true,如果栈不为空,说明结果就是false。3.如果发现当前字符是右括号,取出刚才的栈顶元素,用当前的右括号和栈顶左括号去判定匹配。d)如果不符合上述要求,回到2.继续遍历下一个pushA元素。b)如果栈不为空,判定栈顶元素是不是等于popA的当前元素。3.在每次入栈一个元素之后,都拿着popA进行判定。2.如果发现当前字符是左括号,就直接入栈。2.遍历pushA,把每个元素,依次出栈。Ⅱ利用栈进行链表元素的反向输出。解题思路:1.先有一个栈。原创 2025-04-14 11:03:18 · 372 阅读 · 0 评论 -
【数据结构_5】链表(模拟实现以及leetcode上链表相关的题目)
3.比较这两个引用的值,谁小,就把哪个节点取出来,插入到新链表的末尾,如果这两个引用,有任何一个指向了null,说明该链表就结束了,就把另一个链表剩余的元素都添加到新链表的末尾即可。在链表中,本身是没有下标这样的概念的,不像顺序表,顺序表根据下标访问元素,O(1)复杂度。1.这道题的要点就在于头节点的删除,如果head=[7,7,7,7],我们就先不管头节点,先把后面值等于val的节点删除,然后循环出来再去考虑头节点。使三者遍历整个链表,按照如下图所示的操作完成链表的翻转。书接上文,继续编写链表的功能。原创 2025-04-10 21:01:40 · 516 阅读 · 0 评论 -
【数据结构_6上篇】有关链表的oj题
空间复杂度为O(N)的解法。空间复杂度为O(1)的写法。原创 2025-04-11 23:26:57 · 279 阅读 · 0 评论 -
【数据结构_4下篇】链表
链表,不要求在连续的内存空间,链表是一个离散的结构。链表的元素和元素之间,内存是不连续的,而且这些元素的空间之间也没有什么规律:1.顺序上没有规律 2.内存空间上也没有规律*如何知道链表中包含元素以及如何遍历链表中的所有元素呢?链表中的每一个节点都包含两个部分,一个是他自身的引用变量,另一个是next(下一个节点的引用变量),因此只要我们拥有第一个节点的引用变量,我们就可以完成上述操作了链表的两个特点:1.链表的元素是在离散的内存空间上的2.每个元素都记录下一个元素的地址(引用)原创 2025-04-09 17:15:39 · 428 阅读 · 0 评论 -
【数据结构_4】顺序表
顺序表的”尾插“操作和”根据下标获取/修改元素”操作的时间复杂度都是O(1),说明顺序表比较擅长这两方面的事务。其余操作的时间复杂度均为O(N)。顺序表是基于数组来实现的,所以当我们创建了一个顺序表的时候,是先去申请了一大块空间去创建数组。因此,顺序表具有局限性:1.空间利用率低2.中间位置的插入和删除操作,都需要进行搬运。原创 2025-04-09 15:36:08 · 369 阅读 · 0 评论 -
【数据结构2】包装类等_作业复盘
2. 遍历数组,如果nums[i]与nums[count-1]不等,就将nums[i]搬移。到nums[count]位置,不同元素多了一个,给count++由于不同的元素需要往前搬移,那count-1就是前面不同元素。搬移之后,最后一个元素的位置,下一次在遇到不同元素就应该。1. 设置一个计数,记录从前往后遍历时遇到的不同元素的个数。3. 循环结束后,返回count。搬移到count位置。原创 2025-04-08 17:39:16 · 147 阅读 · 0 评论 -
【数据结构2】包装类&泛型
1.类型分为:(1)基础数据类型(内置数据类型)(2)引用类型这里所有的类都是直接或者间接引用自Object类二者并不一样,举个例子就是int,byte等等不能使用equals,clone等方法如何将二者进行转化?——>包装类java标准库中创建了一组类,能够将内置类型的变量包装一下变成引用类型,这也就是我们所说的包装类!虽然包装类也是类,但是在进行算术运算的时候,需要将包装类转换成基本内置类型,再进行运算!因此就衍生出两个概念:装箱:内置类型—>包装类型拆箱:包装类型—>内置类型。原创 2025-04-08 16:48:12 · 546 阅读 · 0 评论 -
数据结构作业复盘
首先我们要明确,这道题中被重复操作的函数应该是while(i<=n)整个操作,只要当满足条件i<=n的时候他就会一直重复操作,所以时间复杂度应该是(log N)这是一个递归,递归是在栈上进行的,由于迭代了N次,所以T(N)也就被重复调用了n次,时间复杂度也就是O(N)。由题意可知最终创建的数组应该如图所示,所以空间复杂度也就是n+n-1+n-2+...+1=O(n)在这道题中,左右指针最多把整个数组都遍历一遍,也就是N次,所以,他最终的时间复杂度为O(N)。与N无关,故空间复杂度为常数也就是O(1)原创 2025-04-07 21:31:55 · 206 阅读 · 0 评论 -
数据结构和集合类
此处需要注意的点:这里说的是“临时”占用,也就是说我们在考虑空间复杂度的时候,我们是不考虑问题规模N本身的占用空间大小的,比方说,参数传入了长度为N的数组,在考虑这里的空间复杂度的时候,我们无法把数组占据的空间大小记入空间复杂度。for()循环里面的重复操作我们并不计算他的时间复杂度//原因:这些操作消耗的时间非常短,一般在皮秒级别(1s = 10^(-12)s)多个参数:第一个循环中循环了M次,第二个循环中循环了N次,故时间复杂度为O(M+N)斐波那契递归数列 的空间复杂度:O(N)(是看具体的层数)原创 2025-04-07 20:38:49 · 217 阅读 · 0 评论 -
【数据结构_7】栈和队列(上)
顺序表链表这样的结构,功能太丰富了,容易出错;栈/队列针对特定的场景,对顺序表链表做出了限制,从而大大降低了出错的概率。此处所见到的栈,本质上就是一个顺序表/链表,但是,实在顺序表/链表的基础上做出了限制。对栈来说禁止了顺序表/链表的各种增删改查,只支持三个操作:入栈、出栈、取栈顶元素。栈虽然在功能上做出了限制,但是他却是能在特定场景下,解决特定问题的特定手段。因此我们可以认为,栈就是只支持尾插、尾删、获取尾部元素的顺序表/链表。栈是一种特殊的线性表,其只允许在固定的一段进行插入和删除元素操作。原创 2025-04-13 20:58:30 · 300 阅读 · 0 评论 -
【数据结构_7】栈和队列(队列上篇)
队列这样的数据结构,往往是针对“耗时比较长”的操作提供辅助操作,有些操作没办法一口气全部完成,所以需要将他们按照顺序,一个一个处理。队列的表示:Queue 是一个接口(interface) 接口不能创建实例,只能创建其他类来实现该接口,再通过整个类来实现接口中的抽象方法。出入队列的操作都可能抛出异常,但是原则上来说,入队列一般不会失败,除非是插入的元素类型不匹配,传入null值之类的...队列,也是针对线性表进行进行进一步的封装和限制,提供的操作有三个:入队列、出队列、取队首元素。原创 2025-04-14 14:01:48 · 338 阅读 · 0 评论