- 博客(25)
- 收藏
- 关注
原创 【数据结构_7】栈和队列(队列上篇)
队列这样的数据结构,往往是针对“耗时比较长”的操作提供辅助操作,有些操作没办法一口气全部完成,所以需要将他们按照顺序,一个一个处理。队列的表示:Queue 是一个接口(interface) 接口不能创建实例,只能创建其他类来实现该接口,再通过整个类来实现接口中的抽象方法。出入队列的操作都可能抛出异常,但是原则上来说,入队列一般不会失败,除非是插入的元素类型不匹配,传入null值之类的...队列,也是针对线性表进行进行进一步的封装和限制,提供的操作有三个:入队列、出队列、取队首元素。
2025-04-14 14:01:48
190
原创 【数据结构_8】栈和队列
4.pushA遍历完毕之后,如果栈为空,说明当前的结果就是true,如果栈不为空,说明结果就是false。3.如果发现当前字符是右括号,取出刚才的栈顶元素,用当前的右括号和栈顶左括号去判定匹配。d)如果不符合上述要求,回到2.继续遍历下一个pushA元素。b)如果栈不为空,判定栈顶元素是不是等于popA的当前元素。3.在每次入栈一个元素之后,都拿着popA进行判定。2.如果发现当前字符是左括号,就直接入栈。2.遍历pushA,把每个元素,依次出栈。Ⅱ利用栈进行链表元素的反向输出。解题思路:1.先有一个栈。
2025-04-14 11:03:18
242
原创 【数据结构_7】栈和队列(上)
顺序表链表这样的结构,功能太丰富了,容易出错;栈/队列针对特定的场景,对顺序表链表做出了限制,从而大大降低了出错的概率。此处所见到的栈,本质上就是一个顺序表/链表,但是,实在顺序表/链表的基础上做出了限制。对栈来说禁止了顺序表/链表的各种增删改查,只支持三个操作:入栈、出栈、取栈顶元素。栈虽然在功能上做出了限制,但是他却是能在特定场景下,解决特定问题的特定手段。因此我们可以认为,栈就是只支持尾插、尾删、获取尾部元素的顺序表/链表。栈是一种特殊的线性表,其只允许在固定的一段进行插入和删除元素操作。
2025-04-13 20:58:30
206
原创 【数据结构_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
861
原创 【数据结构_5】链表(模拟实现以及leetcode上链表相关的题目)
3.比较这两个引用的值,谁小,就把哪个节点取出来,插入到新链表的末尾,如果这两个引用,有任何一个指向了null,说明该链表就结束了,就把另一个链表剩余的元素都添加到新链表的末尾即可。在链表中,本身是没有下标这样的概念的,不像顺序表,顺序表根据下标访问元素,O(1)复杂度。1.这道题的要点就在于头节点的删除,如果head=[7,7,7,7],我们就先不管头节点,先把后面值等于val的节点删除,然后循环出来再去考虑头节点。使三者遍历整个链表,按照如下图所示的操作完成链表的翻转。书接上文,继续编写链表的功能。
2025-04-10 21:01:40
511
原创 【数据结构_4下篇】链表
链表,不要求在连续的内存空间,链表是一个离散的结构。链表的元素和元素之间,内存是不连续的,而且这些元素的空间之间也没有什么规律:1.顺序上没有规律 2.内存空间上也没有规律*如何知道链表中包含元素以及如何遍历链表中的所有元素呢?链表中的每一个节点都包含两个部分,一个是他自身的引用变量,另一个是next(下一个节点的引用变量),因此只要我们拥有第一个节点的引用变量,我们就可以完成上述操作了链表的两个特点:1.链表的元素是在离散的内存空间上的2.每个元素都记录下一个元素的地址(引用)
2025-04-09 17:15:39
425
原创 【数据结构_4】顺序表
顺序表的”尾插“操作和”根据下标获取/修改元素”操作的时间复杂度都是O(1),说明顺序表比较擅长这两方面的事务。其余操作的时间复杂度均为O(N)。顺序表是基于数组来实现的,所以当我们创建了一个顺序表的时候,是先去申请了一大块空间去创建数组。因此,顺序表具有局限性:1.空间利用率低2.中间位置的插入和删除操作,都需要进行搬运。
2025-04-09 15:36:08
366
原创 【数据结构_3】顺序表
1.创建一个顺序表//第一种,通过下标来实现遍历i++) {//第二种,通过forecah来遍历//特别的,顺序表还可以通过迭代器来进行遍历迭代器是什么?对于所有的线性表都有一个接口Iterable,迭代器就是用来迭代“可迭代的”对象的。迭代表示“一小步一小步地前进,直至接近结果”。<>尖括号里面的泛型类型应该与顺序表的泛型参数一样,从这个创建的式子中我们可见迭代器是顺序表内部内置的东西。创建的迭代器是由哪个集合类生成的,接下来的遍历就是针对这个集合类。
2025-04-08 21:23:59
381
原创 【数据结构2】包装类等_作业复盘
2. 遍历数组,如果nums[i]与nums[count-1]不等,就将nums[i]搬移。到nums[count]位置,不同元素多了一个,给count++由于不同的元素需要往前搬移,那count-1就是前面不同元素。搬移之后,最后一个元素的位置,下一次在遇到不同元素就应该。1. 设置一个计数,记录从前往后遍历时遇到的不同元素的个数。3. 循环结束后,返回count。搬移到count位置。
2025-04-08 17:39:16
145
原创 【数据结构2】包装类&泛型
1.类型分为:(1)基础数据类型(内置数据类型)(2)引用类型这里所有的类都是直接或者间接引用自Object类二者并不一样,举个例子就是int,byte等等不能使用equals,clone等方法如何将二者进行转化?——>包装类java标准库中创建了一组类,能够将内置类型的变量包装一下变成引用类型,这也就是我们所说的包装类!虽然包装类也是类,但是在进行算术运算的时候,需要将包装类转换成基本内置类型,再进行运算!因此就衍生出两个概念:装箱:内置类型—>包装类型拆箱:包装类型—>内置类型。
2025-04-08 16:48:12
539
原创 数据结构作业复盘
首先我们要明确,这道题中被重复操作的函数应该是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
202
1
原创 数据结构和集合类
此处需要注意的点:这里说的是“临时”占用,也就是说我们在考虑空间复杂度的时候,我们是不考虑问题规模N本身的占用空间大小的,比方说,参数传入了长度为N的数组,在考虑这里的空间复杂度的时候,我们无法把数组占据的空间大小记入空间复杂度。for()循环里面的重复操作我们并不计算他的时间复杂度//原因:这些操作消耗的时间非常短,一般在皮秒级别(1s = 10^(-12)s)多个参数:第一个循环中循环了M次,第二个循环中循环了N次,故时间复杂度为O(M+N)斐波那契递归数列 的空间复杂度:O(N)(是看具体的层数)
2025-04-07 20:38:49
214
原创 探索C语言中的结构体
结构体的定义使用struct关键字,后面跟着结构体的名称和包含在大括号中的一系列成员。每个成员都有一个类型和一个名称。例如,我们可以定义一个表示日期的结构体如下:int day;int month;int year;在这个例子中,Date结构体有三个成员:day、month和year,它们都是int类型。
2023-12-17 18:20:40
503
1
原创 整数和浮点数在内存中的存储
整数在内存中的存储相对直观。它们通常以二进制形式存储,每个位(bit)代表2的一个幂。例如,一个8位的整数,最低位(最右边)代表2的0次方,下一个位代表2的1次方,以此类推,最高位(最左边)代表2的7次方。对于有符号整数,通常使用最高位来表示符号,0代表正数,1代表负数。负数通常使用二进制补码形式存储,这意味着负数的二进制表示是其对应正数的二进制表示的反码(每个位取反)加1。
2023-12-17 18:02:21
382
1
原创 【初学者】扫雷游戏的实现(c语言,新手也可以学会,基础版本,函数,数组进阶利用)
因此我们需要创建一个函数,用来初始化棋盘,故该棋盘的名字我们取为(Ini_Board),返回类型为void,不要忘记在game.h里面进行声明。进一步思考,我们再扫雷的时候,会发现后期我们要用数字来表示方格周围有几个雷的时候,有几个特殊位置需要注意。玩扫雷的时候我们不难发现,我们点击一个非雷的格子之后,会得到该格周围隐藏雷的个数。首先,我们这类的扫雷游戏需要标注好行和列的数字,以便于后期输入行列值,然后开始扫雷。当我们在实现1的情况的时候,我们需要再写一个函数进行返回周围炸弹数量。这里我们使用do……
2023-11-02 17:16:18
130
3
原创 萌新程序员的第一篇博客
我打算借助网络,学习一些网络上的资源,以及中国MOOC。另外我认为,学习是一个互相交流的过程,所以欢迎大家和我一起交流学习。我编程的目标是先学习C语言,希望参加一些竞赛,然后根据掌握能力看能不能尝试着学习一下其他的语言。我学习编程是为了提高本人的技术能力,并且在步入社会的时候得到一份比较满意的工作,可以养活自己。我打算每周给予编程两天整的时间,因为是本科生,课也比较多,所以我会尽量挤出时间来学习。我目前最想进入的公司是微软,希望我能够不断提升自我能力,让这家公司能够看见我的价值。
2023-10-15 13:03:16
89
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人