自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 我的创作纪念日

今年大三了,面临就业的压力,今年7月份才开始正式学习C语言,最近刚学完数据结构的初阶内容,准备留几天复习的时间,12月份就开始学习C++,当然,接下来的学习过程中,还会持续不断地更新学习内容,希望能吸引更多粉丝,希望技术不断提升,希望明年能拿个好offer,仅此就已经很满足了!自己报的相关的就业课程,课程要求在听完课后,一定要自己写博客总结一下,所以写博客和我的学习密不可分,每听完一节课,都会发表一篇博客,我也逐渐喜欢上了通过写博客巩固学习。

2023-11-25 15:29:42 505 2

原创 数据结构-归并排序+计数排序

归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序核心步骤:相当于每次把待排数据分为两个子区间,如果每个子区间有序,再让两个子区间归并起来也有序,那整体就有序了。我们可以按照二叉树的思想,把子区间再分为两份,使子区间的子区间有序.......直到子区间分无可分为止。具体过程如下:那该如何让两个有序子区间归并呢?

2023-11-24 20:47:32 299

原创 数据结构-快速排序“人红是非多”?看我见招拆招

也就是说如果我们要排一个升序,我们可以在待排数据中选择一个值key,把大于该值的数据放在该值的右边,小于该值的数据放在该值的左边,然后在左边的数据中同样选择一个值,重复以上步骤,同时,在右边的数据中选择一个值,重复以上步骤,直到key的左边和右边都是有序的,此时所有数据都有序了。,当右边找到小于key的值时,停下来,当左边遍历找到大于key的值时,也停下来,然后交换左右两边的数据,最后当左右相遇的时候,把key交换到相遇位置,这就保证了小于key的数据落入key左边,大于key的数据落在key右边。

2023-11-22 13:08:13 282

原创 数据结构-插入排序+希尔排序+选择排序

而我们之前学过的冒泡排序,时间复杂度是O(N^2),所以插入排序优于冒泡排序。

2023-11-18 20:34:53 649 5

原创 数据结构-二叉树力扣题

之间的比较,而且最好是用。注意:要分全为空、只有一个为空、全不为空三种情况处理。

2023-11-16 22:10:35 804 3

原创 数据结构-二叉树的前、中、后序遍历

前面的章节中,我们学习了二叉树的顺序结构,二叉树除了顺序结构,还有链式结构,在学链式结构之前,要求深入掌握二叉树的结构,下面我们先来手动快速的创建一个简单的二叉树,方便学习,后面再来研究二叉树的真正创建的方式。以上就是二叉树的前、中、后序遍历了,这几种方式其实就是对根的访问的先后问题,如果上述内容还不是很明白,最好画一下递归调用图,这样就很清楚了。通过以上计算,相信我们对二叉树的遍历有了更深的理解,同时也加深了对递归的理解,其实当我们熟练运用递归之后,要计算叶子节点,也可以使用上述分开计算的方法,

2023-11-14 21:35:56 238

原创 数据结构-堆排序及其复杂度计算

目录1.堆排序1.1 向上调整建堆1.2 向下调整建堆2. 两种建堆方式的时间复杂度比较2.1 向下调整建堆的时间复杂度2.2 向上调整建堆的时间复杂度Topk问题上节内容,我们讲了堆的实现,同时还包含了向上调整法和向下调整法,最后我们用堆实现了对数据的排序:那以上代码能实现对数据的排序吗?答案是可以的,但是以上方式有两个弊端:1. 要先写一个堆,太麻烦2. 空间复杂度+拷贝数据。上节内容中,用堆对数据进行排序,是将数据一个一个插入堆,然后再调整排序的,那我们能不能直接把数据就建成一个堆?当然可以,建

2023-11-13 22:20:24 541 2

原创 数据结构-堆和二叉树

目录1.树的概念及结构1.1 树的相关概念1.2 树的概念1.3 树的表示1.4 树在实际中的应用(表示文件系统的目录树结构)2.二叉树的概念及结构2.1 概念2.2 特殊的二叉树2.3 二叉树的存储 3.堆的概念及结构4.堆的实现初始化堆堆的插入向上调整法堆的删除向下调整法 取堆顶的数据堆的数据个数堆的判空堆的销毁完整代码: 测试:下图就是一个树型结构,我们先来了解一下它的相关概念:简单在图中标识一下:树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看

2023-11-12 21:43:37 365

原创 数据结构-栈和队列力扣题

前面几对都匹配上,只有最后一个左括号没匹配上。

2023-11-09 20:53:01 151 1

原创 数据结构-栈和队列(一)

由于只有入栈需要开辟空间,所以这里我们并没有封装开辟空间的函数,直接在入栈函数里面开辟空间就行。这道题说可以在进栈的过程中出栈,ABD不用说,只有C,先出栈的是3,说明此时栈里面1和2肯定还在,而1不可能在2之前出栈,所以选C。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是( )。这相当于单链表的头删,注意分情况,一个节点和多个节点要单独写,同时要用判空函数QueueEmpty()断言队列是否为空。队列很好理解,就像在食堂打饭一样,先排进队的先打饭,打完饭先走,

2023-11-08 20:30:41 320 1

原创 数据结构-双向链表

下面我们再来补充一些内容:这里有个问题,在计算机中使用顺序表效率高还是使用链表效率高呢?答案是:顺序表。因为在计算机中,由于运行速度不匹配的问题,CPU不会直接和主存交换数据,而是先把数据从主存中取出来放到高速缓存中,然后再进行访问数据,而访问数据会出现两种情况:1.如果数据在缓存中,就叫做缓存命中,可以直接访问。2.如果数据不在缓存中,就叫做缓存不命中,这时候需要先把数据加载到缓存中,然后再访问数据。

2023-11-07 21:48:53 622 2

原创 数据结构-单链表-力扣题

和前面学的单链表的中间删除数据一样,使要被删除节点的前一个节点指向下要被删除节点的下一个节点,然后把要被删除的节点free掉。先定义prev和cur,让cur指向头节点,遍历链表,如果cur->val!=val,让prev指向cur,cur指向cur的下一个节点,(),当时停下,让prev的下一个节点指向cur的下一个节点,删除它们中间的cur节点,然后让cur重新指向prve->next,这就实现了节点的删除。

2023-11-06 17:17:08 459 1

原创 数据结构-单链表

在学习链表之前,我们先说说之前学的顺序表,在前面的章节中,我们说,顺序表实际上是对数组的操纵,它的内存空间是连续的,可以通过数组下标随机访问,但是链表就不行,这是顺序表的优点,那它有没有缺点呢?答案是有的。1. 中间/头部的插入删除,时间复杂度是O(N)。2. 增容需要申请新空间,拷贝数据,释放旧空间。会有不小消耗。3. 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容 到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。

2023-11-03 13:22:57 81 3

原创 数据结构-顺序表-力扣题练习

原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。直接将所有数组元素遍历一遍,一一与val的值相比较,如果相等,就用后面的数组元素挪动覆盖该元素。但是这种方法的时间复杂度:O(N^2),不符合题目要求。开辟一个新的数组tmp,将原数组中数组元素与val的值相比较,如果相等,src++,如果不相等,就把该元素放到新数组tmp中,并且src++、dst++,最后把新数组中的内容放回到原数组即可。这种方法的时间复杂度:O(N)空间复杂度:O(N)。

2023-11-02 16:26:12 77 1

原创 数据结构-顺序表

线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

2023-11-01 16:53:40 46

原创 数据结构-时间复杂度和空间复杂度

在计算机科学中,

2023-10-30 21:38:09 95 2

原创 C语言进阶-程序环境和预处理

_FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义;int main()FOR//死循环打印hehereturn 0;;;//死循环打印hehereturn 0;运行结果:使用casecaseint main()int i = 0;switch (i)

2023-10-27 15:51:08 142 2

原创 C语言-文件操作

磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。功能函数名适用于字符输入函数fgetc所有输入流字符输出函数fputc所有输出流文本行输入函数fgets所有输入流文本行输出函数fputs所有输出流格式化输入函数fscanf所有输入流格式化输出函数fprintf所有输出流二进制输入fread文件二进制输入fwrite文件上文中,我们知道了要读写一个文件,要经历打开文件、读写文件、关闭文件。

2023-10-23 20:39:06 1164

原创 C语言 - 通讯录

要实现一个通讯录,首先要有人的信息:姓名、年龄、性别、电话、住址等。

2023-10-21 16:02:43 97 2

原创 C进阶-动态内存管理+柔性数组

动态内存管理函数有4个:malloc、calloc、realloc、free。

2023-10-20 20:19:39 127 1

原创 C语言进阶-自定义类型:结构体、枚举、联合

上文中也讲过struct SNchar c;int i;}sn1,sn2;//全局变量int main()//局部变量return 0;int i;//全局变量int main()//局部变量return 0;上述代码对sn1,sn2进行初始化及打印。运行结果:struct SNchar c;int i;//全局变量struct Sdouble d;for (i = 0;

2023-10-18 16:11:36 122

原创 C语言进阶-字符串函数和内存函数

memcpy函数的功能是:从source指向的位置开始向后复制num个字节的数据到destination所指向的内存位置。它的参数类型是void*型,因为我们不知道传给它的是什么类型的数据,可能是char*、int*、struct stu*等等,所以最好设置为void*型,因为void*型可以接收任意类型的数据。for (i = 0;i < 20;

2023-10-13 21:54:05 77

原创 C语言进阶-指针进阶(3)

它可以写成。

2023-10-12 16:39:37 48

原创 C语言进阶-指针进阶(2)

那类比一下,函数指针数组就是存放函数指针的数组。在学习函数指针数组之前,我们先来用前面学过的知识实现一个计算器(加法、减法、乘法、除法) ,以上代码分别写出加减乘除功能的函数,并将个函数的地址存放在函数指针中,我们可以发现,这几个函数的参数类型和返回类型是相同的,那我们能不能把它们放在一个数组中呢?当然可以,这个数组就被称为函数指针数组。通过观察其实可以发现,函数指针数组其实就是在,pf和[4]先结合成数组,数组中存放的数据类型是函数指针类型。

2023-10-10 20:57:32 57

原创 C语言进阶-指针进阶(1)

数组指针也可以通过类比来了解,整型指针 -- 指向整型变量的指针,存放整型变量的地址的指针变量。字符指针 -- 指向字符变量的指针,存放字符变量的地址的指针变量。那么数组指针就是指向数组的指针,存放数组的的地址的指针变量。下面两个哪一个是数组指针呢?int*p1[10];很明显,p1先与[10]结合,p1[10]是数组,它里面存放的是int*型的指针,这就是指针数组,而(*p2)是分离出来的,它的外面是int [10],是数组的类型,所以p2是指针,指向的是数组,即p2是数组指针变量。

2023-10-09 14:25:47 70

原创 C语言进阶-数据在内存中的存储(2)

常见的浮点数:3.141591E10浮点数家族包括:float、double、long double类型浮点数表示范围:float.h中定义浮点数其实就是数学中的小数,比如:123.45,也可以用12.345*10,和1.2345*10^2表示,它的小数点是可以浮动的,但是值都是相等的,所以叫浮点数。

2023-10-05 22:48:59 43

原创 C语言进阶-数据在内存中的存储(1)

如下图所示:注意上图中我们讨论的是。

2023-09-20 17:49:50 80 1

原创 C语言初阶-实用调试技巧

Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好的使用。编译器中可以选择版本:下面我们来对比一下两个版本:Debug版本:我们可以进行按F10键一步一步的调试,观察代码运行的过程但是Realse版本中,按F10调试时,会直接跳过中间的运行过程,直接到运行的结果。

2023-09-18 22:12:41 265

原创 C语言初阶-初识结构体

int* p;上述代码的s1,s2和s3都是结构体变量,{}中是对它们的初始化。有人这时候有问题了,如果不想按照结构体类型中规定的顺序初始化怎么办?int* p;这两段代码的作用是一样的,我们可以将它们打印一下,不过这就涉及到结构体成员的访问了。

2023-09-12 22:05:05 116 1

原创 C语言初阶-指针初阶(1)

下面再来解释一下这个标准规定:在上图中,红框表示的是数组的在内存中的存储,绿框是数组前后的内存空间,按照标准规定,指针在比较时,指针p能和指针p2进行比较,但是指针p不能和指针p1进行比较。今天就学到这里,未完待续。。。

2023-09-11 16:39:31 122

原创 C语言初阶-操作符详解(2)

exp1?前面我们学过像a+b这样有两个操作数的表达式,+有两个操作数,称为双目操作符;像!a这样有一个操作数的,!只有一个操作数,称为单目单目操作符。今天我们要学的条件操作符有三个操作数,我们把它称作。那么它的作用是什么呢?上述条件操作符中有三个表达式,exp1、exp2、exp3.其实我们可以看出来条件操作符的作用就相当于一个 if....else语句我们也可以用条件操作符来实现前面学过的求两数的较大值。

2023-09-07 21:15:47 208

原创 C语言初阶-操作符详解(1)

算数操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号操作符、下标引用、函数调用和结构体成员。

2023-09-06 17:51:10 171 1

原创 C语言经典小游戏-三子棋+扫雷

【代码】C语言经典小游戏-三子棋+扫雷。

2023-08-30 10:17:34 48 1

原创 C语言初阶-数组

而上述代码中的n是变量。

2023-08-14 23:44:10 889 1

原创 C语言初阶-函数(2)

函数的定义是指函数的具体实现,交代函数的功能实现。int b = 20;return 0;很多教科书会把add函数写在主函数后面,我们运行上段代码时会出现警告,如下图:这是因为在运行代码时,test.c需要经过编译→链接然后生成test.exe文件,在编译时要扫描代码,扫描时一行一行顺次往下的,当扫描到主函数中的add函数时,计算机在之前未见过其定义,所以会出现警告。//函数的声明int main()int a = 10;

2023-08-10 21:50:13 308 1

原创 C语言初阶-函数(1)

如果库函数能干所有的事情,那还要程序员干什么?所以更加重要的是自定义函数。自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都由我们自己来设计,这给了程序员很大的发挥空间。其实函数的功能就像工厂一样,输入参数就像原材料,返回值就像产品,原材料输入工厂产生产品。statement;//语句项ret_type 返回类型fun_name 函数名papal 函数参数举个例子:写个函数求两个数的最大值if (x > y)return x;else。

2023-08-09 23:00:54 88 1

原创 C语言经典小游戏 -- 猜数字

【代码】C语言经典小游戏 -- 猜数字。

2023-07-31 18:36:16 39 1

原创 C语言刷题

运行结果:结果是在同一行上动态汇聚,截图体现不出来,大家可以自己试一试。(只允许输入三次密码,三次之内输入正确则成功登陆,否则退出程序)

2023-07-31 18:33:17 71 1

原创 C语言-折半查找(二分查找)算法详解

此时因为 arr[mid] = 6 < 7,所以令 left = right + 1 = 6,right = 6 不变,此时mid = (6 + 6)/2 = 6,的具体查找步骤,其中比较元素大小的部分,分为arr[mid] < 7,arr[mid] > 7,和arr[mid] = 7这三种情况,我们可以用。由图可见,下标left = 0,mid = 4,right = 9。实现,将它们嵌套在一起就可以实现在一个有序数组中查找一个具体的数。mid = left = right,下次再查找就可以找到了。

2023-07-31 14:30:18 743 2

原创 C语言初阶-分支与循环语句(2)

/while的语法结构while(表达式)循环语句;比如:我们实现在屏幕上打印1~10的数字每次循环打印出a的值,然后a自增1,直到a大于10,退出循环。

2023-07-30 18:30:04 90 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除