- 博客(41)
- 收藏
- 关注
原创 二叉树的链式结构和遍历(下)
又见面了,小伙伴们。今天我们继续来学习二叉树,今天的内容相对来说比较容易理解,前提是需要你们自己动手画图才会好理解。眼过千遍不如手过一遍。所以小伙伴们要多动手哦。直接开始今天的学习吧。
2024-03-23 14:02:24 758 1
原创 二叉树的初步学习和顺序结构实现(上)
好了,小伙伴们,今天我们就先学到这里,下一节我们学习二叉树的链式结构的实现,今天的知识点一定要好好理解,该画图的时候画图,不要嫌麻烦,要为后面的学习打基础。
2024-03-17 14:31:33 838 1
原创 链表的经典题目练习2
那么这个题的方法就是1.首先先判断尾节点是否相等,尾节点相等就是相交(不是比较尾节点的值,比的是地址)2.分别求出2个链表的长度LA和LB,长的链表先走它们的长度差,然后再同时走,第一个相等的就是相交。快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置开始运行,如果链表带环则一定会在环中相遇,否则快指针率先走到链表的末尾。假设慢指针进入环的时候,快指针的位置如图所示。,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
2024-03-14 19:35:19 848
原创 深入了解栈和队列
小伙伴们,今天我们来继续学习数据结构的第二部分内容,就是栈和队列了。那么栈和队列有什么用呢?栈和队列是两种重要的线性结构。从数据结构的角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,它们是操作受限的线性表,因此,可称为具有限定性的数据结构。但从数据类型角度看,它们是和线性表不同的两类重要的抽象数据类型。首先,我们先来学习栈。
2024-03-14 19:33:03 804
原创 双向带头循环链表的增删改查
小伙伴们,我们在上一次学习了单链表,最后也提到了链表的分类,总共有8种类型,这次我们就来学习链表最常见的一种类型,就是我们简单来回顾一下。注意:这⾥的“带头”跟前⾯我们说的“头节点”是两个概念,实际前⾯的在单链表阶段称呼不严谨,但是为了同学们更好的理解就直接称为单链表的头节点。带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这⾥“放哨的”“哨兵位”存在的意义:遍历循环链表避免死循环。当链表中只有哨兵位节点的时候,我们称该链表为空链表,即哨兵位是不能删除的。
2024-03-03 13:34:21 380
原创 深入理解指针2
各位小伙伴们,我们继续来学习指针,指针和结构体以及动态内存管理对后面的数据结构学习有非常大的帮助,所有我们一定要把这些知识点学会。OK,正式进入学习之旅吧。
2024-02-25 21:32:18 1052
原创 单链表的增删改查
小伙伴们,顺序表的增删改查已经学会了,今天我们学习比顺序表还难“亿”点点的链表,也需要增删改查。跟顺序表一样,还是需要创建三个文件SList.h,SList.c和test.c,然后做一些准备工作,具体文件的说明跟顺序表一样,忘了的小伙伴们可以去看一下哦。好了,进入单链表的学习吧。
2024-02-02 15:16:37 903
原创 顺序表的增、删、改、查
/存储数据的底层结构//记录顺序表的空间大小int size;//记录顺序表当前有效的数据个数}SL;细心的小伙伴们发现我也给结构体取了一个别名SL,这样也是为了方便接下来的使用。当然你也可以这样写//存储数据的底层结构//记录顺序表的空间大小int size;//记录顺序表当前有效的数据个数。
2024-01-24 21:16:23 1104
原创 合并两个有序数组
定义q1,q2,q3三个变量,q1的位置是在nums1数组有效长度的位置,即q1=m-1;q2的位置是在nums2数组最后一个元素的位置,即q2=n-1;q3的位置是在nums1数组总长度的位置,即q3=m+n-1。首先让q1和q2进行比较,谁大谁就放在q3的位置,然后让大的和q3都向前走一位,即q1/q2--,q3--,重复上述步骤,如果2个元素相等,那么q1或者q2放在q3的位置,然后向前走一位。将nums2中的数据直接保存到nums1中,通过排序算法对nums1中的所有数据统一进行排序。
2024-01-23 15:35:38 371
原创 LeetCode题目 移除元素
例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。如果src指向的值不等于val的值,那么就把src指向的值给dst指向的值,然后src和dst都向后走,即就是arr[dst]=arr[src];思路1:遇到等于val的元素,将val的位置之后的元素向前挪动,这个思路感兴趣的小伙伴们可以试试,这个思路应该是大多数人都会想到的。函数应该返回新的长度5, 并且 nums 中的前五个元素为0,1,3,0,4。元素的顺序可以改变。
2024-01-23 14:19:47 388
原创 动态内存管理
各位小伙伴们,这次我们来学习一个全新的内容,就是动态内存的管理,在以后的工作和学习中,可能会遇见空间不够的情况,空间开辟大了会造成浪费,小了又会产生问题,所以学会内存的动态管理是很有必要的,接下来就跟着我的步伐一起来学习如何使用动态内存的管理吧。
2024-01-23 13:34:35 954
原创 有序序列插入一个整数
思路分析:我们可以把插入的数字放在数组的最后面,即num[n]=x,然后就从后往前进行比较,把大的数字放在后面。而插入一个数之后就变成了0~n,所以比较的时候,初始条件是下标从n开始,一直到大于0结束。不过我感觉这道题目应该可以用冒泡排序能写出来,但是我试了一下结果有问题,如果有小伙伴会用冒泡排序写的话,可以评论一下哦,我也会试着再用一下冒泡排序,写出来的话,我会发出来的。有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。输出为一行,N+1个有序排列的整数。
2023-12-17 13:20:12 482 1
原创 PTA题目 7-25 念数字
思路分析:我们可以先定义一个字符串数组,求出数组的长度,用循环依次读取每一位数字,用switch的语句写,还要注意一点就是行末没有最后的空格,那么我们可以用if语句来进行判断,从第一个字符开始(下标为0),如果不等于最后一个字符的下标(字符长度减1),就打印空格。在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。题目描述:输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出。输入样例:-600 输出样例:fu liu ling ling。
2023-12-13 18:56:05 280
原创 回文对称数
方法一:可以先计算出是几位数,然后把低位变成高位,以123举例,这是一个3位数,现在要把低位数字放在高位上,我们可以这样思考,权重是从0开始,一直到2结束,于是就是3*10^2+2*10^1+1*10^0,这样就能变成321了,可能表达的不是很清楚,不过看代码就能知道是怎么回事了。今天牛牛学到了回文串,他想在数字里面找回文,即回文数,回文数是正着读与倒着读都一样的数,比如1221,343是回文数,433不是回文数。请输出不超过n的回文数。:输入:10 输出:1,2,3,4,5,6,7,8,9。
2023-12-13 17:55:39 81
原创 输入一个10进制数字,转换为6进制数字,普通方法和递归实现
首先来看常规做法,我们知道转换成6进制,就是一个数对6取余,一直到这个数为0为止,我们以10进制的120为例,120%6=0,120/6=20;3%6=3,3/6=0,所以转化为6进制是320,我们可以把每次取余的结果放在一个数组当中,然后再逆序打印出来就行。接下来说一下递归的方法,我们以前做过一个相似的题目,就是把一个数分别逆序打印和顺序打印,而这个题目就与顺序打印类似,当n==0的时候就停下,话不多说,直接看代码。
2023-12-13 17:33:45 643
原创 删除序列中指定字符串
有一个整数序列(可能有重复的整数),现删除指定的某一个整数,输出删除指定数字之后的序列,序列中未被删除数字的前后位置没有发生改变。思路分析:我们可以遍历数组当中的每个元素,只要数组当中的元素不等于要删除的数字的话就打印出来。可见这个题目还是很简单的。数据范围:序列长度和序列中的值都满足 1≤n≤50。好了,就说到这里吧,还是很简单的。
2023-12-03 13:29:28 124
原创 结构体的详细介绍
例如描述一个学生的信息1.1.1 结构体变量的创建和初始化结构体成员的直接访问 使⽤⽅式:结构体变量.成员名结构体成员的间接访问有时候我们得到的不是⼀个结构体变量,⽽是得到了⼀个指向结构体的指针。如下所⽰:使⽤⽅式:结构体指针->成员名1.2结构体的特殊声明在声明结构的时候,可以不完全的声明。 比如上面的结构体没有名称,上图所示的 p=&x 其实是违法的,编译器会报警告所以 ⽐如,定义⼀个链表的节点:这样的代码是不正确的,因为⼀个结构体中再
2023-12-02 15:19:06 176 1
原创 逆置字符串
思路:(我们用指针解决)定义left和right2个变量,当left<right时,left++,right--,我们需要先求出字符串的长度sz,把left赋初值为arr,right为arr+sz-1(因为strlen(arr)是数组首元素的地址,加上长度在减1才是最后一个元素)思路分析:我们可以先把整个字符串进行逆序,再对每个单词进行逆序,遇到空格就是找到了一个单词,进行逆置,end遇不到空格和\0就继续往前走,当遇到最后一个单词时,结束的标志是\0,所以循环的判断条件加个\0。接下来,介绍第二种情况。
2023-12-01 15:14:46 200
原创 调整奇数偶数顺序
1.给定2个下标left和right,left放在数组的起始位置,right放在数组中最后一个元素位置,数组长度可以用sizeof函数来求。来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。a.如果left和right表示的区间[left,right]有效,进行b步骤,否则结束循环。b.left从前往后找,找到一个偶数后停止,right从后往前找,找到一个奇数后通知。c.如果left和right都找到了对应的数据,则交换,继续a。输入一个整数数组,实现一个函数,
2023-11-29 16:24:56 160 1
原创 数据在内存中的存储
其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为⼤端字节序存储和⼩端字节序存储,下⾯是具体的概念:以0x11223344为例,左边是高位字节,右边是低位字节⼤端(存储)模式:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。⼩端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。
2023-11-29 12:45:31 169 1
原创 C语言内存函数
Hello,小伙伴们,今天我们来学习一下C语言中的各种内存函数,只要把各种函数使用好了,那么我们写代码的效率可谓是事倍功半。OK,正文开始,各位小伙伴们系好安全带,要发车了。
2023-11-26 12:49:11 173 1
原创 sizeof与strlen的区别
好了,这些题目应该能对sizeof和strlen的理解更加深刻,这种题目写的时候应该把图画出来就好写了,多多思考,多多练习。其实上面的题目是我跟着鹏哥学的,我把题目的理解写出来希望能与各位小伙伴一起学习,共同进步。统计的是从 strlen 函数的参数 str 中这个地址开始向后, \0 之前字符串中字符的个数。在学习操作符的时候,我们学习了 sizeof , sizeof 计算变量所占内存内存空间⼤⼩的,单位是字节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。
2023-11-24 19:07:01 111 1
原创 杨辉三角的实现
杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。它的性质有每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大。第n行的数字有n项。前n行共[(1+n)n]/2 个数。第n行的m个数可表示为C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。如图所示。
2023-11-20 18:17:13 123 1
原创 题目:杨氏矩阵
已知一个2维矩阵,其中的元素每一行从左至右依次增加,每一列从上到下依次增加。即对于矩阵Table有Table[i][j] ≤Table[i][j + 1], Table[i][j] ≤ Table[i + 1][j],我们也称这样的矩阵为杨氏矩阵。如上图所示。
2023-11-19 17:56:13 410 1
原创 题目 打印菱形
思路分析:对于打印图案的题目,一般都是有规律可以找的,只要先在纸上分析,就能很快写出代码。上半部分完成了,接下来就是下半部分了,我们可以将图案从中间分为左右2部分,这样左边和右边的*数量相等了,最后在加上中间的一个*号,所以*号的规律就是(line-1-i)*2-1,空格数量就从0开始,一直到等于 i 结束,每次加1 ,好了这样就分析完成了,接下来就能写代码了。
2023-11-17 21:10:29 42 1
原创 PTA 题目7-22 龟兔赛跑
乌龟我们很好理解,它需要一直跑;重点就是兔子的分析,根据题目我们知道兔子的休息条件要满足三个条件,第一每跑10分钟就要停下来,第二看有没有超过乌龟,超过就要休息30分钟,否则继续跑10分钟,第三当休息的时间为0时,就要开始休息,必须都要满足这些条件,兔子才能休息。这样我们就能写出代码了。
2023-11-17 18:25:28 279 1
原创 PTA 题目7-17 爬动的蠕虫
首先我们根据题目知道往上爬动和往下滑动都需要花费一分钟,那么我们可以根据题目每次进行爬动和滑动的时候,时间都要加1,显然这需要循环来解决;这样我们就可以来写代码了。我相信有人就会这么写,但是答案算的有问题,原因是这样的循环方式相当于下降完之后才判断有没有爬出井,而我们要判断的是上升完之后就要进行判断有没有爬出。解决办法就是我们要在循环内部加个判断条件,当往上爬完之后就要判断有没有爬出,爬出了就跳出循环。
2023-11-17 17:52:51 717 1
原创 冒泡排序的实现
但是这个方法的冒泡排序效率不是很高,因为当排成0,1,2,3,4,5,6,7,8,9时还在进行比较,只是没有进行交换,所以就需要进行优化,代码如下。那么冒泡排序的核心思想是:两两相邻的元素进⾏⽐较。接下来我将用图示法来对冒泡排序算法还不理解的同学进行解释。今天我们来看一看冒泡排序,排序的算法有很多,比如说:冒泡排序,快速排序,希尔排序等。看一下没有优化时对这个数组需要进行多少次比较。
2023-11-17 17:31:27 39 1
原创 递归实现n的k次方
思路:以2的3次方为例(只考虑k>0),2的3次方可以看成2*2^2,而2^2可以看出2*2^1,2^1可以看出2^0。如果想算当k<0时,那么可以写成。
2023-11-15 17:21:19 29
原创 打印整数二进制的奇数位和偶数位
将输入的数字的二进制向右移动 i 位,移动完后的结果与1进行按位与,如果是0,则第 i 个比特位是0,结果是非0,则第 i 个比特位是1。因为我们看二进制位一般都是从右向左看,所以我们是右移,右移 i 位后的结果先打印,因此当每位都打印完之后,结果是从右向左看。题目描述:获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列。思路:一.提取所有的奇数位,是1打印1,是0打印0,偶数位同理。二.检测某一位是0还是1的办法。好了就简单介绍到这吧。
2023-11-14 09:34:36 156 1
原创 寻找单生狗
可能还有人不知道什么是异或,在这里我就简单说明一下,2个数要进行异或操作,是对它们的二进制进行操作,对应的二进制位,相同为0,相异为1。这个寻找单身狗是比较初级的,因为一个数组里面只有一个元素不相同,所以只需用0依次对每个元素进行异或操作,基本思路只要知道。在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字。数组中有:1 2 3 4 5 1 2 3 4,只有5出现一次,其他数字都出现2次,找出5。好了,这样就能写代码了。
2023-11-13 10:56:07 25
原创 深入理解指针(1)
哈喽,大家好,欢迎来到指针的学习,指针作为C语言中最难学的部分,要想把指针学好需要下大量的功夫,也需要把以前学的知识学好才能更好的理解指针。另外在以后的学习中 ,数据结构和算法也需要用到指针相关的知识,所以,从现在开始学好指针是十分重要的。接下来,就由我来带大家学习指针吧。
2023-11-12 12:30:58 313 1
原创 函数的递归和迭代及相关习题
例如,1234%10就能得到4,然后1234/10得到123,这就相当于去掉了4 然后继续对123%10,就得到了3,再除10去掉3,以此类推,不断地%10和/10操作那么就能得到1234的,每一位,但是得到的数字顺序是倒着的。但是求第n个斐波那契数是不适合用递归方法解决的,例如当n=50时,它的结果需要很长时间才能输出,对于我们来说,这个计算所花费的时间我们很难接受,这也说明递归方法是非常低效的,我们可以做个测试来说明为什么递归方法低效。递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢?
2023-11-04 17:15:40 57 1
原创 BC 107 矩阵转置
它的好处是程 序员不必在开发时,随意为数组指定⼀个估计的⻓度,程序可以在运⾏时为数组分配精确的⻓度。有 ⼀个⽐较迷惑的点,变⻓数组的意思是数组的⼤⼩是可以使⽤变量来指定的,在程序运⾏的时候,根 据变量的⼤⼩来指定数组的元素个数,⽽不是说数组的⼤⼩是可变的。在C99标准之前,C语⾔在创建数组的时候,数组⼤⼩的指定只能使⽤常量、常量表达式,或者如果我 们初始化数据的话,可以省略数组⼤⼩。上⾯⽰例中,数组 arr 就是变⻓数组,因为它的⻓度取决于变量 n 的值,编译器没法事先确定,只。下面简单介绍一下变长数组。
2023-10-28 16:47:58 78
原创 BC-68 X型图案
(1,1)(1,2)(2,1)(1,2)这4个位置,每个小位置里面是2个空格,就相当于把“*”换成“o”,打印的时候是“oo”。思路:为了更好的说明,我用i表示行,j表示列,“o”表示空格,因为题目要求是每个“*”后面有一个空格,所以我把“*o”放在一个表格里,通过观察得出当i==0和j==0时需要打印*o,这样第0行和第0列就打印完了,然后就剩下第3行和第3列了,这个时候就是当i==n-1和j==n-1时需要打印。多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。
2023-10-28 15:57:38 81 1
原创 简单介绍分支循环语句
C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种 结构的组合。C语言的常见分支结构有if,switch,常见的循环语句有while,do while和for循环。下面先来介绍一下if语句的使用方法吧。
2023-10-27 16:22:54 42 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人