- 博客(102)
- 收藏
- 关注
原创 Lesson6--排序(初级数据结构完结篇)
构建最大堆或最小堆:将待排序的数组视作一个完全二叉树,并且通过调整父节点与子节点的关系,使得每个父节点的值都大于或小于其子节点的值,即构建最大堆或最小堆。:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次。:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次。调整堆结构:交换元素后,调整堆结构,使其重新满足最大堆或最小堆的性质。
2024-05-31 01:08:21
826
2
原创 Lesson02---类与对象(上篇).pdf
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 上面结构体的定义,在C++中更喜欢用class来代替。 2. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名:: ps:这里会和.成员访问函数混淆,这里主要和全局函数区分所以用域作用限定符 成员变量命名规则的建议 4.类的访问限定符及封装 4.1 访问限定符 C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选
2024-05-28 23:13:52
741
原创 树的非递归遍历(层序)
打印NULL ,这里front也会把NULL带进去。完整代码(栈和队列是复制前几篇的代码)他层序的就是:1 24 356。层序是采用队列的方式来遍历的。
2024-05-23 22:22:06
253
原创 KY11 二叉树遍历(牛客网)
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
2024-05-21 23:23:39
189
原创 二叉树的前序遍历(leetcode)
这道题的启发性真的很强 ,这里必须传入i的指针进去,下一次栈帧i++,但回到了上一层i又变回到了原来的i,所以这里需要用指针来控制数组的下表。
2024-05-15 00:25:39
342
2
原创 Lesson5--二叉树(超详细版)
树是一种的数据结构,它是由nn>=0)个有限结点组成一个具有层次关系的集合。。有一个,根节点没有前驱结点(如下图)
2024-05-13 23:04:33
1287
原创 相同的树LeetCode
递归其实大部分人都是想的太复杂了其实可以不先去向递归的展开图,先思考最小子问题就把他当成一个循环来做。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。,编写一个函数来检验这两棵树是否相同。给你两棵二叉树的根节点。
2024-05-13 12:58:29
349
原创 二叉树的四种遍历代码实现
前序:1 2 3 N N N 4 5 N N 6 N N。中序:N 3 N 2 N 1 N 5 N 4 N 6 N。后序:N N 3 N 2 N N 5 N N 6 4 1。前中后都是以递归的方式,层序就和堆差不多是一层一层的访问。理解了上面的代码就可以尝试写出他的代码了。4.层序:从根开始一层一层的向下。二叉树的遍历大致能分为以下几种。层序:1 2 4 3 5 6。ps:这里的N是NULL。1.前序:根 左 右。2.中序:左 根 右。3.后序:左 右 根。
2024-05-13 12:12:55
327
原创 设计循环队列
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。// 返回 false,队列已满。// 返回 true。// 返回 true。// 返回 true。// 返回 true。// 返回 true。// 返回 true。
2024-04-26 13:30:37
273
原创 用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):实现MyQueueint pop()int peek()truefalsesizeis empty100pushpoppeekemptypoppeekO(1)nO(n)栈。
2024-04-22 21:32:27
287
原创 用队列实现栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppop和empty实现MyStackint pop()int top()truefalsesizeis empty// 返回 2// 返回 2// 返回 False100pushpoptopemptypoptop你能否仅用一个队列来实现栈。
2024-04-22 01:46:15
580
原创 Lesson4--栈和队列
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。栈中的数据元素遵守后进先出LIFO)的原则。压栈:栈的插入操作叫做进栈压栈入栈,。出栈:栈的删除操作叫做出栈。。栈的实现一般可以使用,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的 代价比较小。
2024-04-21 03:13:20
1098
原创 随机链表的复制
给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的。深拷贝应该正好由n个节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的next指针和random指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。。例如,如果原链表中有X和Y两个节点,其中。那么在复制链表中对应的两个节点x和y,同样有。返回复制链表的头节点。用一个由n个节点组成的链表来表示输入/输出中的链表。
2024-04-17 23:55:46
434
原创 环形链表II
给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(如果pos是-1,则在该链表中没有环。pos,仅仅是为了标识链表的实际情况。链表。[0, 104]-1。
2024-04-16 03:41:37
235
原创 链表中倒数第k的结点(快慢指针法)
用快慢指针找中间节点是用速度差,fast=2*slow,fast到尾节点slow刚好是中间。这里是用步数差,fast先走了k步,在同时走fast到了尾节点那么slow就差了k步。
2024-04-15 00:49:50
497
原创 OR36 链表的回文结构
思路:找到链表的中间节点(偶数个的话取右边那个)然后把从中间节点开始反转链表然后在用反转后的链表和反转的前半部分的链表比。对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。给定一个链表的头指针。
2024-04-12 12:56:48
276
原创 Lesson3--顺序表和链表
线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储顺序表的底层是数组,链表的底层是结构体顺序表在内存中是连续的,链表则不是连续的顺序表是用一段的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改顺序表一般可以分为:1.。2.
2024-04-12 11:54:19
631
原创 Lesson2: 算法的时间复杂度和空间复杂度
如何衡量一个算法的好坏呢?斐波那契数列的递归实现方式非常简洁,但简洁一定好吗?那该如何衡量其好与坏呢?当计算斐波那契数列时,使用递归的方法会导致计算量呈指数级增长,效率较低。这是因为在递归计算中会重复计算相同的子问题,造成了资源的浪费。举个例子,我们来计算斐波那契数列的第n项,假设n=5。斐波那契数列的递归定义为:如果我们采用递归的方式计算F(5),会涉及到很多重复计算,导致效率低下。示例代码如下:在这个例子中,计算F(5)时会重复计算F(3)、F(2)等子问题,导致效率低下。
2024-04-11 00:40:29
1075
原创 Lesson1--数据结构前言
数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。
2024-04-07 20:53:51
896
原创 双向链表专题
1.双向链表的结构⽬录1.双向链表的结构2.实现双向链表3.顺序表和双向链表的分析正⽂开始1.双向链表的结构注意:这⾥的“带头”跟前⾯我们说的“头节点”是两个概念,实际前⾯的在单链表阶段称呼不严谨,但是为了同学们更好的理解就直接称为单链表的头节点。带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,它其实就是编译器生成的随机值然后存这前驱节点和后继节点,只是站在这⾥“放哨的”“哨兵位”存在的意义:遍历循环链表避免死循环。2.双向链表的实现。
2024-04-07 01:50:16
375
原创 链表的应用
Josephus及他的朋友躲到⼀个洞中,39个犹太⼈决定宁愿死也不要被⼈抓到,于是决定了⼀个⾃杀 ⽅式,41个⼈排成⼀个圆圈,由第1个⼈开始报数,每报数到第3⼈该⼈就必须⾃杀,然后再由⼀ 个重新报数,直到所有⼈都⾃杀⾝亡为⽌。然⽽Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与⾃⼰安排在。思路2.创建三个指针,分别定义前驱节点,当前节点,后续节点,来反转链表具体实现如下,思路1.创建一个新i链表然后头插。单链表相关经典算法OJ题4。单链表经典算法OJ题⽬。
2024-04-05 00:39:01
350
原创 c++前言
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代, 计算机界提出了。
2024-03-31 20:34:41
743
原创 链表(下)
1.顺序在插入的数据的时候数据需要进行移动势必会降低效率2. 扩容存在性能的消耗3.扩容会存在内存的浪费所以引入了链表这种更好用的数据存储(由独立的节点组成)
2024-03-30 21:29:02
188
原创 单链表专题(上)(顺序表链表线性表)
在开始之前思考一个顺序表的问题1. 中间/头部的插⼊删除,时间复杂度为O(N)2. 增容需要申请新空间,拷⻉数据,释放旧空间。会有不⼩的消耗。3. 增容⼀般是呈2倍的增⻓,势必会有⼀定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插⼊了5个数据,后⾯没有数据插⼊了,那么就浪费了95个数据空间。思考:如何解决以上问题呢?答案是肯定的, 那就是链表。
2024-03-27 01:07:39
299
原创 合并两个有序数组(力扣)
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。,5,6] ,其中斜体加粗标注的为 nums1 中的元素。最终,合并后数组不应由函数返回,而是存储在数组。需要合并 [1,2,3] 和 [2,5,6]。需要合并的数组是 [] 和 [1]。个元素表示应合并的元素,后。需要合并 [1] 和 []。中,使合并后的数组同样按。合并结果是 [1]。合并结果是 [1]。
2024-03-19 02:04:47
408
原创 移除元素(leetcode)
你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。你不需要考虑数组中超出新长度后面的元素。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。为什么返回数值是整数,但输出的答案是数组呢?不要使用额外的数组空间,你必须仅使用。, 并且 nums 中的前五个元素为。的元素,并返回移除后数组的新长度。函数应该返回新的长度。
2024-03-19 00:07:24
538
原创 顺序表后续以及通讯录项目
⽬录1.基于动态顺序表实现通讯录项⽬2.顺序表经典算法3.顺序表的问题及思考正⽂开始继上一篇1.动态顺序表的查找这里挺简单的如找不到就返回一个负数,因为索引不可能是负的这里就用来代表找不到下面是找不到的示例最终代码可以优化成这样。
2024-03-13 23:41:30
806
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人