- 博客(13)
- 收藏
- 关注
原创 归并排序(二路归并)
假设初始序列有n个记录,则可以看做有n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或者1的有序子序列,然后在两两归并,如此重复,直到得到一个长度为n的有序序列为止。1.时间复杂度:每次调用merge都遍历了数组,调用量了logn次。2.空间复杂度:由于借助了辅助数组,因此占用了那个空间。时间复杂度和空间复杂度。
2024-09-19 23:23:10
355
1
原创 二叉树的构建(两种方法)
它的先序遍历为:A B C D E F G H。它的中序遍历为:C B E D F A G H。它的中序遍历为:C B E D F A G H。它的后序遍历为:C E F D B H G A。
2024-09-19 10:37:05
322
原创 二叉树的前中后序遍历(递归版)
如图二叉树的先序遍历为:A B C D E F G H。此二叉树的中序遍历为:C B E D F A G H。此二叉树的后序遍历为:C E F D B H G A。先遍历二叉树的左节点,再遍历根节点,在遍历右节点。先遍历二叉树的左孩子和右孩子,在遍历根。先遍历二叉树的根节点,再遍历左右节点。如图是一个简单的二叉树。
2024-09-18 22:25:17
376
原创 C++基础知识总结
c++中函数可以重载的原因:函数名修饰规则和c不同,C语言会默认成函数的原名,而c++会修饰成函数名加上形参的缩写,因此参数不同,c++会认为是两个不同给的函数,从而实现重载。7.理论上指针的级数没有限制,但引用只有一级,即不存在引用的引用,但存在指针的指针。6.对指针变量使用sizeof求得指针的大小,而对引用变量使用sizeof得到的是变量的大小。4.指针变量的值可以发生改变,存储不同实例的地址,而引用在定义时被初始化,之后无法改变。如果两个函数的参数表中参数的个数或类型,或顺序不同,则认为是重载。
2024-06-13 14:59:55
905
原创 八大排序之快速排序
通过一趟排序将待排序列分成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分序列进行排序,以达到整个序列有序的目的。
2024-05-30 22:13:04
390
原创 冒泡排序,选择排序,直接插入排序
(2)时间复杂度:分析可以发现,无论是最好还是最坏的情况下,比较的次数都是一样多的,第i趟排序需要比较n-i次关键字的比较,此时需要比较1+2+3+....(n-1)=n*(n-1)/2次,时间复杂度为O(n^2).而对于交换次数来说,最好的时候交换0次,最差的时候交换n-1次。考虑到最坏的情况,待排序列是完全逆序,此时要比较1+2+3+....(n-1)=n*(n-1)/2次,时间复杂度为O(n^2).(1)算法思想:使待排序列的最小值像冒泡一样移动(交换)到最开始,由此循环往复,形成升序的有序序列。
2024-05-22 08:54:07
261
原创 动态内存开辟函数的使用
首先,我们平时在main函数内定义的类型变量是存储在栈上面的,但由于在内存中,栈所占用的内存空间很少,所以当我们想存储更多的信息,可以在堆区(1.5G-1.9G)进行存储,而动态内存开辟就是在堆区进行的。在使用malloc函数后,做开辟的内存空间的值是随机值,而calloc函数可以将所开辟的内存空间的值用0进行初始化,这便是和malloc函数的不同之处。free函数作为堆内存释放函数,在进行动态内存开辟后,一定要进行释放,不然系统CPU将对开辟的内存失去管控,从而造成资源空间的浪费,导致内存泄露。
2024-05-14 22:03:24
490
2
原创 位段(结构体)联合体,枚举
联合体和结构体的主要区别在内存上,结构体的每个成员拥有自己独立的内存空间,结构体大小是:所有成员的大小+内存对齐填充的字节总和。注意:一个位域必须存储在同一个字节中,不能跨两个字节,如果一个字节不够存放另一位位域时,应从下一单元存放,也可有意使某位域从下一单元开始。枚举值默认从0开始,往后依次累加1,也就是说week中,Mon,Tues.....Sun对应的值是为0,1.....6。在某一时刻,只能存储某一个成员的值,后一个成员的值会覆盖前一个成员的值。有了枚举变量,就可以将枚举变量中的值付给它。
2024-04-20 10:58:48
643
原创 struct结构体
之前我们学习了基本数据类型char,short,int,long,long long,float,double,还学习了数组类型,指针类型,但在具体的应用场景中,这些类型是不够的,有时候我们需要其中的几个一起来修饰某个变量,例如学生的信息包括char类型的姓名,char类型的性别,int类型的年龄,int类型的学号等等,因此我们需要将这些特性融合成一体,来修饰学生,由此引出了一个新的类型-----结构体类型,结构体类型是用关键字struct来定义。访问结构体数组的成员。6.结构体大小的求法。
2024-04-17 16:53:17
635
原创 八大排序之直接插入排序和希尔排序
(2)对已排序好的元素从左至右依次和tmp比较,若比tmp大,则向右移动一个位置,繁殖比tmp小或者触底,则这趟排序结束。原始数据为:18,75,89,1,57,8,97,24,8,91,72,3,89,71,98。思想:将待排序的第一个值插入已排序好的序列中,循环往复,直到待排序序列没有元素为止。设置增量数组,数组的增量为素数,最后一个必须是1.组内直接按照直接排序算法进行排序.希尔排序是对直接插入排序的优化,其思想是待排序的n越小,带排序越有序。空间复杂度O(1);数据量为n时,排序的趟数是n-1趟;
2024-04-09 10:02:10
338
1
原创 c语言指针总结(三)
用const标记的值就是一个常性的值,是不能够被改变的,它多用于函数的内部设计,例如,如果要进行s1和s2两个字符串的比较,那么他们的值是不需要改变的,因此可以在连个字符串前加const修饰,表示它的“常性”。指针数组,顾名思义,就是存放指针的数组,它的本质还是数组,它与数组指针不同,不要搞混了。2.const与指针的结合。
2024-04-08 17:23:43
396
原创 c语言指针总结(2)
小端存储是将数据的低位存储在内存的低地址处,高位存储在内存的改地址处;大端是将低位存储在内存的高地址处,高位存储在内存的低地址处;指针开始指向的是数组首元素的地址,且指针的偏移量为0,因此数组的下标从0开始,即与指针的偏移量对应。数组和指针的关系:arr[0] *(arr+0) 例如:arr[5]=*(arr+5)。指针加n的能力:指针指向的数据类型 *p:p+n-->sizeof(所指向的数据类型)*n。指针+1的能力:指针p+1=>p的偏移量+sizeof(类型)字节。例如:char**p;
2024-04-07 20:08:20
448
1
原创 C语言指针总结(一)
指针在X32的系统下大小是4字节,在X64的系统下大小是8字节,指针的大小与其类型是没有关系的。函数指针的本质也是一个指针,不过指针指向的对象是函数,该指针的地址指向了函数。数组指针可以用typedef进行重命名,这样就可以更方便的使用数组指针了。数组指针,顾名思义,就是它的本质就是指针,不过指针所指向的对象是数组。,我们经常所说的指针就是指针变量,是用来存放地址的变量。(1)普通指针可以通过解引用来访问值。函数指针也可以重名用,以便使用。(1)普通指针的定义。(2)数组指针的定义。(2)数组指针的使用。
2024-04-07 19:23:45
439
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅