- 博客(50)
- 收藏
- 关注
原创 树和二叉树之间的转换和森林和二叉树之间的转换(补充线索二叉树的描述)
顾名思义含线索的二叉树则称之为线索二叉树何为线索?如果某个结点的左孩子为空,则将其指针域指向其前驱如果某个结点的右孩子为空,则将其指针域指向其后继这种由空(NULL)指向前驱或后继的指针称为线索。
2024-08-21 22:16:19
433
原创 二叉树的存储
定义一个结构体使每一个结点的数据类型都包含两个指针域一个指向左孩子,一个指向右孩子,还有一个存储当前的值的数据域,再采用递归的方式,其指向的左右孩子同样含有上述的属性,一直递归下去直到将所有元素都存储完。即将二叉树中的结点所存数据从上到下从左自右依次存入一个数组中,当某个结点无左孩子或右孩子则在数组中存入0随后继续往后存储。
2024-08-11 10:51:44
257
原创 二叉树的遍历与根据遍历序列求二叉树
遍历的过程主要是将其对应的遍历规则结合整体和拆分的观点去看,就如上述例子一样其遍历的规则为DLR,所以开始将整个二叉树看成一个整体,可将其分成D、L、R三部分,然后根据该规则紧接着取遍历拆分出来L部分,然后继续向开始一样去遍历直到拆分出来的部分都为3个单个结点为止。第二步:在中序中以确定的根结点将结点分为左右两边,即左边:ELB ,右边:MHIDJ。1、因为先序遍历的规则为DLR,所以先遍历根结点,得出根结点为。(L表示遍历左子树,D表示遍历根结点,R表示遍历右子树)为根结点继续使用DLR的遍历规则,
2024-08-09 21:31:56
949
原创 树和二叉树
2、如果对一颗有n个结点的完全二叉树(深度为 | log以2为底n的对数 | +1 )的结点。1、在二叉树的第i层上至多有2的 i-1次方个结点(i>=1),至少有i个结点。1、具有n个结点的完全二叉树的深度为 : | log以2为底n的对数 | +1。2、深度为k的二叉树至多有2的k次方减1个结点(k>=1),至少有k个结点。2、如果2i>n,则结点i为叶子结点,无左孩子,否则其左孩子是结点 2i。3、如果2i+1>n,则结点 i无右孩子,否则其右孩子是结点 2i+1。根结点:非空树中无前驱结点的结点。
2024-08-08 21:29:43
604
原创 广义表的简要概述
2、多层次性:表中的元素可以是单元素,也可以是子表,而子表也同样可以是单 元素或者子表。格式: 表名=(元素1,元素2,元素3,……表尾:Ls(tail)=(b,c,d);例如:A =(b,c) 深度为1。表头:Ls(head)=(a);
2024-08-08 10:42:27
313
原创 串的模式匹配算法
代码说明:KMP算法大致和BF算法不同之处在于,当发现字符不匹配时主串i不在回溯而是停留在匹配时的位置 ,回溯的仅仅是子串j的位置,这就由代码中的next【】决定了,具体代码应用时需要将上述代码中的next换成调用其的函数(上述代码只是说明作用)2、当子串中的:j!代码说明:其中的S为主串,T为模式串,(两个串都是只存储了字符的线性表),且字符的比较位置都是从1开始,i代表字符在主串中的位置,j代表字符在模式串中的位置。j=3时:前面为ab则前后比较发现无相同字符,所以n=0,k=0+1,next=1。
2024-08-07 09:16:56
934
原创 队列的创建和基本使用
该代码中定义了两个结构体:主要原因是,在使用链队中指针front和rear都同时需要两个变量的数据类型所以,第一个结构体变量是为第二结构体所需的数据类型所定义的。代码中的Status 和上述的QElemType一样为自己根据需要求定义的数据类型。补充说明:因为上述代码中队采用的是循环队列,所以其队空时和队满时的条件相同。代码中的QElemType为自行定义的数据类型,可根据需要自行定义。代码中的Status为自行定义的数据类型,可根据需要自行定义。解决该问题的方案有:1、另外设一个标志以区别队空和队满。
2024-08-06 21:52:17
485
原创 栈的创建和基本使用
为C语言方式的分配存储空间。代码中为C++的方式(释放空间时使用delete),C语言释放空间则使用free。所以和线性表一样根据存储方式的不同可以将栈分为顺序栈和链栈。栈是操作受限的线性表,即栈只能在表尾进行插入删除的操作。代码中的Status是根据自己需要自行定义的数据类型。链栈:运算受限的单链表,只能在链表头部进行操作。栈中的元素个数=top - base。2、获取栈顶元素e、
2024-08-06 10:00:09
477
原创 双向链表和循环链表
而整个结构体则是因为链表所需要存储的数据要多个不同数据类型,因此采用结构体的形式将其定义在结构体中,所以可以将结构同样看成一个数据类型(内部包含多个数据类型)1、循环链表的结构体定义和其他功能与链表大致相同,不同之处在于其初始化时尾指针(最后一个元素的指针)是指向头结点的再将两者置空完成初始化。结合了双向链表和循环链表的特性,一个结点中存在着两个结点,一个指向前驱一个指向后继。再就是头结点的前驱指向最后一个结点,最后一个结点的后继指向头结点,形成双向循环。2、两个循环链表的合并。Ta和Tb为两个链表。
2024-08-05 21:31:48
329
原创 链表的创建
即:L = (LinkList)malloc(sizeof(Londe));否则链表初始化无法传入主函数中。这里需要注意的是在主函数中需要在声明定义了链表后,紧接着分配该链表的存储空间。首元结点:是指链表中存储第一个数据元素的结点。头结点:是在链表的首元结点之前附设的一个结点。2、按所给位置查找(返回对应位置的数据域)7 1、按值查找(返回其对应的位置)头指针:是指向链表中第一个结点的指针。6、取单链表中第i个元素的内容。链式线性表的创建(顺序存取)1、创建链表的结构体。
2024-08-01 22:12:03
466
2
原创 线性表(顺序表创建)
先找到需要插入位置的元素,确定以此为分界线,前面存储的元素不变,从该数起到所存储的最后一个元素为止,倒着从最后一个元素开始后移一位,为要插入的数腾出空间,插入后表长加一。先找到要删除的位置,以该位置到最后一个元素为止,将该元素的后一个元素存入该元素的位置覆盖要删除的元素,后面的元素依次往前覆盖,直到最后一个元素覆盖完。顺序表实际上就是将将元素存入一个数组中,只不过这存入的每个元素所包含的数据。线性表的创建主要利用了c语言中的结构体和指针,是对它们的更深层次的理解。代码中的参数L为创建的线性表。
2024-08-01 14:27:38
647
原创 结构体相关案例
格式: typedef struct 结构体名字 {后面如果要使用该结构体直接使用别名即可。其中联系方式也是一个结构体里面包含手机号,电子邮箱。要求把这三个学生信息放入到数组当中,并遍历数组。格式: struct 结构体名字 {里面的成员如下:姓名,年龄,联系方式。注意:此时的结构体的名字可有可无,定义一个函数修改学生的中的数据。学生的属性有:姓名、年龄。定义一个结构体表示学生。定义一个结构体表示学生。学生的属性:姓名,年龄。定义一个结构体表示学生。
2024-07-25 11:27:10
425
原创 字符串的相关案例和string库函数的使用
字符串的存储特性:在存储过程中字符串都会在末尾自动添加一个结尾标志符\0。统计键盘输入的字符串中有多少个大写,小写,和数字。定义一个数组存储5个学生的名字并进行遍历。键盘录入一个字符串,并遍历出来。strlwr:将字符串变成小写。strupr:将字符串变成大写。strlen:获取字符串长度。strcat:拼接两个字符串。strcmp:比较两个字符串。strcpy:复制字符串。
2024-07-24 20:54:00
477
原创 指针的相关案例
这个函数相当于将a和b中的数值复制一份传给该函数。数值,实际上这两个数值所代表的变量并没有交换。所以交换也仅仅是10和30这两个数字而已。原因:该函数接收的只是两个数值,所以交换的也只是这两个。a依旧等于10,b依旧等于30。从运算结果来看很显然,并没有交换两个变量的值。下面带来一个类似的案例来加深对于指针的理解。对于a和b并没有影响。定义格式:数据类型 * 指针名。求一个数组中的最大值和最小值。使用void指针交换两个变量。指针:存储内存地址的变量。使用指针交换两个变量的值。
2024-07-23 16:13:48
398
原创 C语言数组的相关案例
因为每次向数组添加一个随机数时我们都需要检测一下数组中是否有元素与其重复。如下代码中的fun函数将要添加的随机数与数值中的每一个元素都比较一遍。数组的遍历:这里需要注意的是我们在遍历数组时是使用for循环,这里则需要计算数组的长度。如果有相同的则返回1反之为0,这样当我们每次要添加元素时就可以通过。在本代码中:将max < arr[i] 中的小于号换成大于号,求出来的则为最小值。思路:本题主要重点是如何时数组不重复,也是本题首先要解决的问题。生成10个1-100之间的随机数存入数组,要求数组数不重复。
2024-07-22 10:28:26
407
原创 C语言随机数的生成相关案例
则可以: rand()%((1+num2)-num1)+num1;假设想要生成的范围为 num1 ----num2。2、生成范围为17-39之间的随机数且不包括39。1、种子的值固定不变则,可以将初始值变成时间戳。1、生成范围为12-87之间的随机数。1、设置种子:srand(初始值)通过for循环简单生成10个随机数。1、种子不变则生成的随机数是固定的。2、获取随机数:rand();猜字游戏在范围为1-100中。2、随机数的范围无法确定。
2024-07-21 20:43:28
547
原创 C语言两数相除(要求只能使用加法和减法)求商和余数
9/3=3 9-3=6 6-3=3 3-3=0 减了3次 最后一次为0。10/3=3余1 10-3=7 7-3=4 4-3=1 减了3次 最后一次为1。思路分析:举个例子如 8/3 =2余2 8-3=5 5-3=2 减了2次 最后一次结果为2。所以可以得出规律为:被除数 减去除数结果大于等于0的次数为商 最后一次结果为余。
2024-07-19 21:25:20
894
1
原创 while进阶相关案例
然后再将其与原数相比较相同则为回文数反之则不是。只需要将案例1中的方法照搬过来先求出反转后的数。引导案例:键盘输入一个3位数控制台返回其反转后的数。案例1:输入一个数使用while将其反转。案例2:判断键盘输入的数是否为回文数。
2024-07-19 21:21:34
341
原创 while循环的简单相关案例
2^0=1 观察可以发现每一个数都是前一个数的2倍。2^1=2 且一直除以2最终都可以得到1。珠穆朗玛峰的高度为8844.43米,这里有一张厚度为0.1毫米的纸。案例1:键盘输入一个数判断是否是2的幂次方。需要折叠多少次才能大于等于珠穆朗玛峰的高度。通过列举一些2的幂次方来观察规律。
2024-07-19 20:52:37
492
原创 if语句的简单应用
案例2:对于某人的好感度大于60则输出我喜欢你,反之则输出我不喜欢你。(该案例使用了if 、 else if 和else)案例1:体温测量当温度超过37.5℃会有提示语句出现。案例3:成绩分析,根据不同的成绩分段输出相应的奖励。(该案例简单应用了if的判断属性)(该案例使用了if else )
2024-07-19 20:37:43
302
原创 C语言switch的使用
2.case值只能是(字符/整数)的字面量,不能是变量。5.default当所有情况都不匹配时执行它的语句。4.break表示中断,结束switch语句。3.case值不能重复。注意事项:1.表达式计算结果只能为(字符/整数)案例:输入月份控制台返回对应的季节。switch(表达式) {switch的使用语句。
2024-07-18 22:51:19
283
原创 C语言:键盘录入案例
键盘录入一个两位数,不能包含7且不能是7的倍数,符合则返回1,不符合则返回0。案例3:键盘录入长方形的长、宽、高,求面积和体积。用于接收键盘输入的数据并赋值给对应的变量。scanf("占位符",&变量名);案例2: 键盘录入判断问题。占位符后面的的变量要对应。第一个参数中不写换行。案例1:键盘录入求和。
2024-07-18 22:37:13
549
原创 JavaScript统计字符串中出现次数最多的字符
最后通过for in循环比较对象中个属性值大大小然后将其打印出来。思路:使用charAt()方法可以通过for循环来依次遍历出字符串中的字符。如果该对象中该属性没有值则对其赋值为1。如果该对象中已经有值了则在原基础上加1。将遍历出来的字符作为一个空对象的属性。
2024-07-16 15:57:29
378
原创 JavaScript字符串对象查找字符出现次数
2.而且想要继续往后查找则需要跳过前一个已经查询了的字符的位置,则可以在原先位置加 1后再查找。3.将2中的信息放入循环中则可以将整个字符串都查询一遍循环退出条件为当查询结果为-1时 结束。思路:1.根据indexOf()方法的特性只会返回要查找的字符出现再字符串中的第一次的位置。查找字符串中某个字符出现的次数。
2024-07-14 13:59:20
673
原创 JavaScript数组对象去重案例
当发现空数组中有和去重数组中有相同元素时则条出本次循环不在将该元素存入该素组中。将需要去重的数组在for循环中依次遍历存入空数组中。可以创建一个空数组,用来承接需要去重的数组中的元素。
2024-07-14 13:42:46
300
原创 JavaScript猜数字案例(使用了random方法生成随机数和Math内置对象)
当刚好等于时立即退出循环并提示猜对了(代码中whlie循环不为死循环即当猜了10没猜中 后也会退出循环)当输入的数大于生成的随机数时提示大于了,小的时候提示小于了。思路: 使用random方法生成规定范围内的随机数(代码中为1-50)
2024-07-14 13:32:39
321
原创 JavaScript日期对象倒计时案例
4.最后将所求的倒计时剩余时间转换为天,小时,分钟,秒即可。3.用所求时间的减去当前时间的可得到倒计时剩余时间。2.再求出所需要求的时间的总毫秒数。思路:1.先求出当前时间的总毫秒数。
2024-07-14 13:21:18
507
原创 JavaScript创建对象的三种方法
var 对象名 = { } //创建格式。3.构造函数创建对象(可以创建多个对象)只需要改变对象名和参数则可以。
2024-07-13 16:14:30
490
原创 JavaScript通过函数调用的方法实现简易加算计机功能
3.然后调用函数并创建一个变量赋值给这个变量,随后通过发改变调用函数内的 参数既可以选择想要进行的运算。2.函数体则通过switch来通过承接到的符号选择相应的运算方式。代码说明:1先创建一个函数包含三个形参(一个用于传递运算符号,另外两个用于传递数)4.最后输出变量即可。
2024-07-12 21:14:50
1137
原创 JavaScript数组冒泡排序
4.再内部循环内部编写函数体(当前一个元素大于后一个元素则交换位置)3.内部循环用来确认每一趟需要比较的次数。2.外部循环用来确认比较的趟数。思路:1.冒泡排序需要用到双层for循环。
2024-07-12 13:07:54
1530
原创 JavaScript打印乘法表
说明:打完代码按(ctrl + s)保存,后按(Alt+B)进入网页,并在网页输入要打印的为几 阶乘法表,(图中所表示的时九阶乘法表)然后按F12则可以查看输出了。
2024-07-11 20:52:38
1491
原创 JavaScript简易ATM机功能
3.在while循环中使用switch并对应开头所填写的数字,这里要注意的是要将开始创建 用于switch的作为条件的变量强制转换为数字型。2. 随后使用while循环确保只有当我们在选用switch的对应选项时才会停止界面,否 一直循环。4.最后要将已退出的警示框写在循环外,并将它所对应的数字作为跳出循环的条件。说明:该代码包含了while循环和switch的使用,还有一些简单的加减法运算。
2024-07-10 20:23:57
921
原创 Java编写程序练习list集合
1.按顺序往集合中添加5个字符串对象:“tom”,”linda”,”jack”,”alice”,”bob”。2.对集合进行遍历,分别打印集合中的每个元素的位置与内容。3.打印集合的大小,然后删除第3个元素后,倒序遍历集合。
2024-07-05 22:32:22
943
原创 Java统计大串中小串出现的次数
举例:在字符串” woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun”中java出现了5次.
2024-07-04 13:36:49
1247
原创 在程序中定义抽象类Shape、Shape的子类Rectangle
(2)子类Rectangle为矩形类,包含两个成员变量,分别为矩形的长和宽,并为Rectangle类编写适当的构造方法。痛过覆盖父类的抽象方法area来求矩形的面积,覆盖girth()来求矩形的·周长。(1)抽象类Shape中包含两个抽象方法area()、和girth()
2024-07-02 16:10:51
417
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人