- 博客(27)
- 收藏
- 关注
原创 26.树: 二叉搜索树的中序后继节点
首先访问左子树,然后访问当前节点,最后访问右子树。对于上述树的中序遍历结果是:3, 5, 7, 10, 12, 15, 18。问题:1. 5节点的后继节点是7,我要怎么通过2. 3节点的后续节点是5,我要怎么通过。
2024-09-14 11:50:54 299
原创 23.树:二叉树的遍历
在LRD(Left-Right-Data)遍历策略中,最关键的步骤是数据的读取(Data)。中序输出指的是按照树的节点排列顺序来输出节点数据。这种遍历策略可以抽象为递归过程。具体步骤如下:首先检查当前节点是否有左子树(Left),如果有,则递归跳转到左子树进行遍历。如果当前节点没有左子树,则检查是否有右子树(Right),如果有,则递归跳转到右子树进行遍历。在左右子树都检查完毕后,读取当前节点的数据(Data)。在完成一个节点的左子树遍历后,返回到该节点继续执行其右子树的。
2024-09-13 15:30:30 1344
原创 20.树:二叉搜索树实现的解析
乱么?哥哥们??真他妈乱。我都不知道我写的什么玩意!大佬们凑合看。看不下去,则看该教学视频?树:二叉搜索树 (C/C++实现) - 内存中的栈与堆详解_哔哩哔哩_bilibili。
2024-09-12 21:59:19 1355
原创 17.队列:使用链表实现队列
不是已经有数组实现队列了么?为什么还要用链表实现呢?没事找事?傻b!大家不妨思考一个问题:数组队列只能存这会导致:多的队列的存不下队列用不完浪费内存空间。要队列,那就换个扩充数组容量,也就是换个更大的数组,这时候又要把数组中所有内容全部拷贝到新数组,复杂度为取决于数组内队列元素N的个数,太麻烦了!那么能不能有线性的队列呢?队列多的情况能容纳,少的情况又可以不浪费内存空间。
2024-09-11 18:38:00 489
原创 16.队列:使用数组实现--进阶版
这段代码中,队列满的判断条件与之前不同,之前是通过判断尾元素`达到数组边界后,通过加1操作将其索引转换回。,从而实现环形数组的特性。`是否达到数组边界;
2024-09-11 17:05:41 352
原创 14.栈:使用栈将中缀表达式转换为后缀表达式
在遇到右括号之前,操作符按照正常逻辑运算顺序入栈Push。乘法操作符 () 的优先级高于加法操作符 (),所以高优先级操作符先出栈Pop(对于前缀表达式)或后出栈Push(对于后缀表达式)。遇到右括号时,执行栈内操作符的出栈操作,直至左括号出栈完毕。当所有操作数和操作符处理完毕后,检查栈是否为空。如果不为空,则继续执行出栈操作,直到栈为空。最终,将得到一个完整的前缀或后缀表达式。这个过程确保了操作符的顺序正确地表示了原始中缀表达式的计算顺序,而无需使用括号。
2024-09-10 23:42:35 431
原创 13.栈:表示前缀操作符
前缀操作符:(操作符) (操作数) (操作数因为前缀阅读方式是从右往左后缀操作符:(操作数) (操作数) (操作符因为后缀阅读方式是从左往右二. 操作代码需要注意的点:代码和之前后缀代码差别不大,需改动的点为以下:①之前是从前往后,现在是从后往前,就是从数组最后一个元素往前进行移动所以要把for循环修改,初始值改为总长度,且当i大于等于0则一直执行②while循环中是i--而不是i++,数组整体从左向右移动,从大到小移动。并且出了while循环后的i++,是让数组。
2024-09-10 22:02:12 380
原创 12.栈:表达后缀操作符
获取两个数,然后进行入栈加减乘除操作使用的话只能要区分数字,方式就是空格区分。比如:121+,这个计算机不知道是1+21还是12+1,这时候就用空格隔开。也就是121+。棕色代表空格写完我都想s人,谁™会这么写啊?
2024-09-10 17:47:38 405
原创 11.栈:检测括号匹配性
利用栈的先入后出的特性二. 创建栈对象,这里是用Str_Stack创建了栈对象。三. 遍历数组,也就是一个一个检查栈的元素左括号{、[、(右括号}、]、)前一个元素top什么情况会不对应?输入:这会报错退出此时圆括号右括号要结束,那么他要确定上一个元素,也就是,但发现类型不匹配,所以这里就报错退出。总结:条件:1、数量匹配;2、左括号要有右括号对应;3、出现右括号前,该括号对应的左括号之后出现的所以括号都必须已经匹配。即最后的左括号先遇到匹配的右括号。
2024-09-10 15:24:51 336
原创 9.栈:链表实现
头插法尾插法栈的特性:压栈Push出栈Pop,他们的时间复杂度都为O(1):遍历到链表结尾,然后再插入,删除也一样。所以尾插法空间复杂度为;:就只是对第一个元素进行更改删除,空间复杂度为;这里为了符合栈特性O(1)只能使用头插法。
2024-09-09 18:40:31 293
原创 8.栈:静态数组实现
先入后出入栈、出栈、返回栈顶元素、判断栈是否为空O( 1 )是原数组,再将2.这样做的复杂度是O(n),耗费时间与数组元素成正比。
2024-09-09 17:41:21 174
原创 7.双向链表:链表的实现
在32位操作系统下:单向链表8字节:4字节用于存储指针next,4字节用于存储int数据;双向链表2字节:8字节用于存储指针next与prev指针,4字节用于存储int数据;在原有单向链表基础上增添了prev指针prev指针指向。
2024-09-09 13:01:05 325
原创 6.单链表:递归反转链表
对的,单纯交换两个数字是没用,因为这里面是多重指向,所以这里就继续进行交换,直至栈帧释放完成。切记,这里易出错,第一次执行是返回return跳转到下一层栈帧。,所以改变头节点要告诉main函数,所以最后。通过newHead返回告诉main函数。此时递归到达最末尾,也就是。,此时将当前位置标志位。因为这里指针仍然是个。
2024-09-08 23:24:27 294
原创 5.链表:递归打印链表
1.递归是时间换空间,要额外创建栈帧,消耗栈空间。递归次数过多会栈溢出程序崩溃。2.所以一般是使用普通函数遍历,在单个栈帧上操作3.为什么使用递归?简化代码,苦逼机器。
2024-09-08 21:30:36 453
原创 IIC协议中SDA_IN与SDA_OUT理解
也就是咱们说的8421法,4个小方格数据再乘上0或1累加起来,如果都是1的话,那就是1*8+1*4+1*2+1*1=8+4+2+1=15.答:STM32有32个位,但是你要是写出来32太累了,因为你要写32个小方格,所以工程师就规定了4个小方格为一组,一共是8组(32÷4=8),所以你看看FFFF0FFF是不是8个。1 & 1 = 1;答:位是bit的意思,是存储数据的最小单元,单元里头只能填0和1,所以是二进制表示。答:用&搭配0的目的是清楚数据,0乘任何数都是0,先把之前的旧数据清除掉!
2023-10-18 10:59:44 521 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人