自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 常见的时间复杂度(1修)

冒泡排序:O(N ^ 2)二分查找:O(logN)

2024-04-27 16:56:45 35

原创 数据结构——复杂度(时间,空间)

最上边的冒泡排序的空间复杂度就是1,因为他只用了常数次的临时变量,或称为只开辟了常数次的空间,所以按照第2点的推导方法,得冒泡排序的空间复杂度为1。那么n - (n - 1) + n - (n - 2)+ ……+ n - 3 + n - 2 + n - 1 即时间复杂度的具体表达式。(2).在得到了具体的复杂度表达式之后,只保留该表达式的最高阶项,并将前边的系数改为1。倒数第二个元素(即第n - 1个元素)想要排列完毕则要经过n - (n - 1)重循环。0.时间复杂度指的是算法中的基本操作的执行次数。

2024-04-27 16:34:37 203

原创 C一些其它知识点

前缀L在单引号前面,表示宽字符,宽字符的打印使用 wprintf, 即wprintf()的占位符为%lc;宽字符的字面量必须加上前缀L,否C语言会把字面量当作窄字符类型处理.在双引号前面,表示宽字符串,即wprintf()的占位符为%ls.普通字符占一个字节,宽字符占用两个字节(汉字也属于宽字符)3.宽字符的类型是wchar_t。1.●▼▲这些叫宽字符。

2024-03-10 20:16:53 338

原创 一些造贪吃蛇所需要的冷门知识

1.控制台:平时的那个黑框框,还有cmd即命令提示符2.使用cmd命令设置控制台窗口的大小:30行,100列3.通过命令设置控制台窗口的名字title 贪吃蛇4.我们能够用C语言中的system函数来执行系统命令2.3.4例:system("title 贪吃蛇);注:在程序结束后,名字会恢复原样可以用这个:system("pause");//pause叫暂停(按任意键继续)5.坐标(0,0)表示最左上角哪个地方(注:是左上角顶部!

2024-03-10 15:45:38 846

原创 数据结构2

空间复杂度不是程序占用了多少bytes的空间,因为这个也没意义,空间复杂度算的是变量的个数.空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度。数组所占用的空间复杂度也是表述的是变量的个数(可能是常数个,也可能是N个)注:空间复杂度算的是额外的空间消耗(即因为算法的需要而开辟额外的空间)4.斐波那契递归Fib的时间复杂度是O(2 ^ N)6.冒泡排序的空间复杂度是O(1)(2).插入和删除才是最麻烦的点。时间复杂度是O(N ^ 2)所以时间复杂度是O(N)

2024-02-22 20:16:11 496

原创 数据结构1

6.算法的时间复杂度是一个函数(数学里的函数),算法中的基本操作的执行次数,为算法的时间复杂度。5.时间复杂度主要衡量一个算法的运行快慢,空间复杂度主要衡量一个算法运行所需要的额外空间。当N趋于无穷时,F(N)后边那两项几乎可以忽略不计,所以它的档次是O(N ^ 2)上述代码的时间复杂度是F(N) = N ^ 2 + 2 * N + 10。1.内存用数据结构管理数据,外存(硬盘)用数据库(也称文件)管理数据。16.我们要考虑好代码的实现难度,简洁程度,(可读性,可维护性)(函数式中只有常数)

2024-02-22 17:19:26 538

原创 C语言链表至双向链表(已修)

1.在做OJ题的时候,要把题目给的信息看完整。3.写函数时,有时要保持接口的一致性。4.顺序表和双向链表的优缺点分析搜。2.双向链表一定是带有哨兵位的。

2024-02-14 19:58:54 364

原创 顺序表的运用至单链表02(已修)

1.顺序表是线性表的一种.线性表的物理结构不一定是线性的线性表的逻辑结构一定是线性的但顺序表的物理结构和逻辑结构都一定是线性的2.头文件的嵌套调用会有语法错误1.链表能解决顺序表(1).扩容导致空间浪费(2).插入数据在头部或在中部时,要整体进行挪动(3).重新扩容导致的时间浪费的问题2.链表也是线性表的一种它的逻辑结构连续而物理结构不连续3.链表是由一个一个节点组成的4.函数传输指针也可能是传值调用1.exit(1)的神奇运用结果是什么都不打印。

2024-02-08 19:14:51 359

原创 C语言顺序表(已修)

1.可以用ctrl + c 来终止程序运行2.可以将0转换为一个结构体类型的指针,而这就相当于某个结构体的首地址是0。此时,每一个成员的偏移量就成了相对0的偏移量.3.偏移量计算的位置从起始该变量的起始位置开始4.一个文件:test.txt即文件名.拓展名而且,文件名可以不包含后缀名5.键盘输入是从标准输入流输入的6.sscanf函数读到空格就不读了7.将整数0强制类型转化为某个结构体类型的指针,则在地址0处开始会造一个这样的结构体。

2024-02-05 19:22:14 330

原创 编译和链接(已修)

1.我们输入的代码在变为命令时,要经过翻译环境(将代码变为可执行的机器指令)和运行环境(执行对应指令)即将.c文件转化为.exe文件2. 翻译环境具体搜:3.编译具体三个步骤(预编译(也称预处理),编译,汇编)搜:4.在C语言中,#开头的指令都是预处理指令,在预处理阶段完成,5.预处理过程中,进行了(1).头文件的包含还有#define的替换(就是运行了#开头的指令)(2).注释的删除(替换成了空格)6.在预处理过程中,源文件和头文件都会被处理成.i为后缀的文件7.预处理阶段主要处理#开头的指令,处理规则如

2024-02-04 09:36:56 789

原创 C的文件操作(已修)

1.栈区上的空间运行效率很高堆区分配的空间一般由程序员主动释放静态区的话程序运行结束后由系统释放2.根据数据的组织形式,数据文件被称为文本文件或者二进制文件数据在内存中以二进制的形式存储,如果不加转换的输出到外存的文件中,就是二进制文件如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。而字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储。

2024-02-02 10:10:24 422

原创 动态内存分配(已修)

情况二:在已经开辟好的空间后边,没有足够的空间,直接进行空间的扩大在这种情况下,realloc函数会在内存的堆区重新找一个空间 (满足新的空间的大小需求的同时会把旧的数据拷贝到新的新空间,然后释放旧的空间,同时返回新的空间的起始地址。包含柔性数组成员的结构要用malloc函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。对一部分动态分配的内存进行free函数的空间释放(即同一块空间的不完全释放)后边那个指针指向的是要释放的空间的起始地址。

2024-01-30 22:33:28 351

原创 C语言数据在内存中的存储和结构体&联合体&枚举(已修)

17.位段的各个成员并非都有地址,所以不能对其使用&操作符,如果要赋值的话,就得要先造一个临时变量,然后再通过其赋值给位段的各个成员。10.是一个一个的来对齐的,对齐的目标点是当前的成员的占用空间(与编译器默认某个值(VS默认是8)的较小值)的倍数。8.关于结构体的自引用:可以在结构体内部创建并存储该结构体类型变量的指针(即地址),但不能再在内部创建该结构体。13.如果在结构体内部有结构体,那么里边那个结构体所占据的空间的那个起始的点要从该结构体整体的对齐数开始。联合体的大小至少是最大成员的大小.

2024-01-28 20:45:03 469

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

在不同的系统和C语言标准库的实现中都规定了一些错误码,一般是放在errno.h 这个头文件中说明的,C语言程序启动的时候就会使用一个全局的变量errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表示的意思是没有错误,而当我们在使用标准库中的函数的时候发生了某种错误,对应的错误码就会被存放在errno中,而一个错误码的数字是整数,我们很难理解是它是什么意思,所以每一个错误码都是有对应的错误信息的.strtok函数找到str1中的下一个标记,并将其用\0结尾,并返回一个指向这个标记的指针.

2023-12-23 12:00:49 2007

原创 C语言字符串函数

在前边那个字符串当中找后边那个字符串的位置,如果有,则返回后边那个字符串在前边那个字符串中 第一次 出现的地址,没找到则返回NULL。count超出那个要追加的字符串长度时,追加完成后加上\0,函数就跑路了,不会给你加上更多的\0。之间只要有d就是打印有符号数,?该函数会一直找arr1的\0再将前边的内容存入arr2中。目标字符串中也得有/0,否则没办法知道追加从哪里开始.他会给你默认在后边追加上一个\0(会多追加一个\0)目标空间必须有足够的大,能容纳下源字符串的内容.文档里的nul和NUL就是\0。

2023-12-21 23:13:16 2088

原创 C语言指针7

这里的a是第一行的地址,*a就是第一行,sizeof(*a)计算的是第一行的大小,16个字节。这里不存在越界,因为sizeof内的表达式不会真实计算的,计算的是第四行的大小即16个字节。1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。第二行的数组名,单独放在sizeof内部,计算的是第二行的大小即16个字节。2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址.访问的是第二行,计算的是第二行的大小,16个字节。7.%d打印的是原码,%p打印的是补码。

2023-12-20 22:34:08 500

原创 C语言指针第六集

在监视那里输入数组名,元素个数即可.但要注意进入的这个函数必须要存在该数组,即该数组必须在此函数内部有一席之地。2.sizeof的操作数如果是类型的话,计算的是使用类型创建的变量所占内存空间的大小.5.对printf("%d\n", sizeof(*&arr));sizeof只关注占用内存空间的大小,不在乎内存中存放什么数据.那个my_exc函数参数可以将void*改为char*1.模拟实现qsort函数排序整形。arr的类型是int [5];

2023-12-18 21:56:30 653

原创 C语言指针5

第四个参数是函数指针, 这个函数是用来比较待排序的东西的两个元素的,比较elem1和elem2指向的元素,如果elem1 < elem2,则要求返回一个小于0的数字;如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应.双引号引起来的是字符数组,类型是char[ ],后面还隐藏一个\0,单引号的是一个字符,类型是char。

2023-12-18 19:33:52 470

原创 C语言指针4

13.二维数组解引用一次的的话是找到了一维数组,而此时一维数组是该一维数组的数组名,即该数组首元素的地址,再对它进行解引用就拿到了某个数据。这是一个函数的声明,函数名是signal,参数类型是(int, void(*)(int) ),返回类型是void (*)(int)12.二维数组传参传过去的也是首元素的地址,那么就可以用数组指针来接受那个一维数组,这也就是二维数组传参的本质。16.若parr是数组指针,则parr里面存的是这个数组的地址,解引用拿到的是首元素的地址。上述代码中p的类型是int*

2023-12-17 12:24:23 565

原创 C语言指针3

而在函数接收数组的形参那里,用的是指针来接收而并非用数组来接收。7.将一个数组传给函数后,不能在函数内部求数组的元素个数。因为给函数传数组时,传递的并非数组,而是数组首元素的地址。相邻的两个元素进行比较,如果不满足顺序就进行交换。4.size_t等价于unsigned int。而arr[i] == *(arr + i).8.数组降级指的是数组变为了数组首元素的地址。因此,arr[i] == p[i];上述代码中, p == arr;5.关于数组首元素的地址。sizeof,&数组名。上述代码中,数组降级了。

2023-12-16 23:22:28 443

原创 C语言指针2

17.NULL是C语言中定义的一个标识符常量,值是0,0也是地址,这个地址是无法使用的,读写该地址会报错.(用调试就能看出来)这样会越界访问,注:此处,指针可以指向数组之外的地址.但是不能通过其来访问。double* 类型的指针进行解引用后一次能访问8个字节。3.int* 类型的指针进行解引用后一次能访问4个字节。在*左边就是一样的,都不能通过p对p指向的内容进行修改。char* 类型的指针进行解引用后一次能访问1个字节。指针减指针运算的前提条件是:两个指针指向同一块空间。9.指针减指针可以得到负数。

2023-12-16 17:23:08 674

原创 操作符详解2

26.32位机器有32根地址总线,每根地址线出来的电信号转换成数字信号后是1或者0,那我们把32根地址线产生的2进制序列当做一个地址,那么一个地址就是32个bit位,需要4个字节才能存储.如果指针变量是用来存放地址的,那么指针变的大小就得是4个字节的空间才可以.同理,在64位机器上,有64根地址线,一个地址就是64个二进制位组成的二进制序列,存储起来就需要8个字节的空间,那么指针变量的大小就是8个字节。25.计算机不会事先找好内存来存储所有的地址,那些地址是咱约定俗成的,自己就知道的。

2023-12-15 17:17:33 1040

原创 2.操作符详解

从2进制序列中右边最低位开始向左每3个2进制位换算为一个8进制位,剩余不够3个2进制位的直接换算。从2进制序列中右边最低位开始向左每4个2进制位换算成一个8进制位,剩余不够4个2进制位的直接换算。7.原码取反(符号位不变)加 1,得到补码,补码取反(符号位不变)加一,得到原码。15.位操作符:&(按位与), |(按位或), ^(按位异或), ~(按位取反)4.有符号 的整形的二进制位最高位是符号位,其余是数值位。得到的b是a的补码(符号位也是)按位取反得到的值。有 0则 0,全 1才 1(符号位也遵从),

2023-12-13 22:29:14 1886

原创 1.函数递归起(复习)

12.递归的思想:把一个大型复杂问题层层转化为一个与原问题相似,但规模较小的子问题来求解;直到子问题不能再被拆分,递归就结束了.所以递归的思考方式就是把大事化小的过程。2.在realse版本中,代码已经得到了优化(编译器可能会自作主张地对代码进行优化),在大小和速度上都是最优的。2.如果使用递归写出的问题,是存在明显的缺陷,那就不能使用递归,得用迭代的方式处理。1.如果使用递归写代码,非常容易,写出的代码没问题,那就使用递归;5.设立断点条件时,条件可以是表达式,但是不能是什么函数之类的。

2023-12-12 23:25:32 372

原创 汉诺塔问题(C语言)

然后到了第二轮,将B上边的(n-2)个放到A上去,要func2(n-2)次,再将最下边的那一个放到C中去,要一次,现在就将目标投向了求将A上边的(n-2)个放到C中去,要func2(n-2)次,,共要2*func2(n-2)+1次。首先,第一轮,将A上边的(n - 1)个移动到B上,要func2(n - 1)次,然后,将剩下的那一个放到C处去,要一次,再讲B上的(n-1)个放到C上去,要(n-1)次.那么就将原问题变化为了求2*func2(n-1)+1.建立函数func2为求得n个盘子所需要的步数。

2023-12-12 22:45:14 395

原创 青蛙跳台阶(C语言)

2.问题:青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法?那么每一次跳台阶都可以分成跳一次和跳二次,在调完一或二次之后,又可以分为跳一次或跳二次,以此类推。但要注意,在最后两个台阶的时候,青蛙有两种跳法,在最后一个台阶的时候,青蛙有一种跳法。假设让青蛙跳上一个台阶,那么还有(n - 1)个台阶要跳。假设让青蛙跳上二个台阶,那么还有(n - 2)个台阶要跳。4.该问题实质是一个斐波那契数数列。

2023-12-12 21:29:32 475

原创 C语言第十九集(文件操作)

8.往文件里边写入数据样例及顺序读写函数介绍搜。7.perror函数可以查看函数报错信息。6.文件的打开与关闭(和模版)搜。打开路径默认是当前文件所处的位置。10.fscanf的注意事项搜。2.程序文件和数据文件具体搜。1.C中程序内存区域划分搜。3.用二进制形式写文件搜。4.流和标准流具体搜。

2023-12-11 20:59:12 370

原创 C语言作业6

注意好偏移量和实际是第几个的区别。3. 字节序 才有大小端。1.联合体也会完全浪费空间。那个对齐数是和偏移量有关的。(就用我之前的那个就行了)

2023-12-10 20:06:07 308

原创 C语言第十八集(动态内存管理)

在调用完函数后,像上述的函数在调用完后,由于p没了,所以malloc函数所申请的那部分空间就没办法释放了,所以就发生了内存泄漏。10.realloc(NULL,40)与malloc函数一样,因为没得调整空间,那就只能开辟空间。11.malloc,calloc,realloc函数申请的空间,出了作用域是不会主动销毁的。8.realloc函数开辟空间的操作都是在malloc等函数实现开辟好的空间里边运行的。除了使用free函数和程序结束,他们申请的空间都不会主动释放。18.传值调用和传址调用的一个特殊例子搜。

2023-12-10 12:31:10 397

原创 C语言作业5

4.字符的 -128 - 1 后变为了 127。而int (*fun)(int x,int y);5.在字符里,整数 0 就是\0。2.函数名可以默认是函数的地址。6.小端的话,低位存在低地址那。3.运用好题目给的规律。

2023-12-10 10:33:34 319

原创 C语言第十七集(待修)

15.联合体和结构体大致一样,也是由一个或者多个成员组成,这些成员可以是不同的类型。当最大成员的大小不是最大对齐数的大小的时候,就要对齐到最大对齐数的整数倍。4.总之,我们在创建结构体时,要将占用空间小的成员集中在一起。19.对联合体的一个成员进行更换的时候,其它成员也会跟着更换。,但是在联合体中编译器只为最大的成员分配足够的内存空间。(有关于内存分配的,还有关于 : 后边的数字含义的)21.联合体的大小至少是最大成员的大小,中,它的char是1,所以他的对齐数是1。

2023-12-08 22:16:00 517 1

原创 C语言第十六集(后续)(结构体)

2.结构体自己给自己里面包含一个结构体变量((此结构体就是当前所处的这个结构体))指针是没有问题的,但是。结构体自己给自己里面包含一个结构体变量(此结构体就是当前所处的这个结构体)是有问题的.两个匿名结构体尽管内容完全相同,但编译器仍然认为二位是不相同的类型。1.匿名结构体(即不写结构体名)只能用一次,而且匿名结构体写法特别危险。4.对于结构体的重命名搜。3.匿名结构体自引用搜。可以为1,不行为2搜。

2023-12-08 16:00:46 323

原创 C语言第十六集(前)

但科学计数法中的E是可以为负数的,所以IEEE 754规定存入内存时E的真实值必须再加上一个中间数,对于8位的E这个中间数是 127;比如说保存1.01的时候,只保存后边的01,等到读取的时候,再把第一位的1加上去。9.在小端环境下,int 的 1 计入内存中是 (十六进制表示) (低地址) 01 00 00 00 (高地址) , (低地址) 02是02 00 00 00 (高地址)10.1E12表示的是1乘以10的12次方(已测过)

2023-12-07 21:25:52 484

原创 python常用函数

其中的random是一个模块(类似于C中的系统库)(它也能生成小数)(注意引好库)3.random.randint(1,6)可以生成1到6的随机整数(都能取得到)例,用str转换为字符串(类似的还有float),字符串可以互相拼接。但是它返回的值是一个字符串(即现在只能做出打印那些操作)5..len可以传字符串,列表,元组,字典,自定义的类型。所以要记得用了input函数后要强制类型转换。4.sys.exit(0)可以退出当前函数。input里边可以是任意类型的数据。想做出其他操作的话,要强制类型转换。

2023-12-02 23:07:49 419

原创 8.C转python(不用看)

往后运用pip中的第三方库应该都是在那个Teminal中输入代码来安装。python搞了一个网站pypi,把各种的第三方库给收集起来了。使用pip工具就可以直接从pypi里下载你想要的第三方库了。安装完成后,即可使用import导入相关模块即可进行使用。真正用到这个代码时,还是正常地去用。1.在文件查找中,文件夹才是目录。生活中使用的二维码大多是一个网址。3.二维码本质上是一段字符串。借助第三方库:qrcode。可以直接使用pip工具搜。5.操作excel搜。

2023-12-02 23:07:43 417

原创 7.C转python(已删减)

第一个参数是打开哪个文件,第二个参数是打开方式('r'表示read,即按照读的方式打开;'w'即write,按照写的方式打开;'a'表示append,也是按照写的方式打开,但是它会把内容写到原有文件内容的末尾)例:(其中的encoding那个是关键字参数)(一个汉字也是一个字符在python)但是使用'a'方式打开则会继续追加内容(可以使用\n符号来完成换行)11.如果文件对象已经被关闭,则不能再对其进行写 等 操作。用print()又会自动加一个\n。本来读到的文件内容末尾带有\n,

2023-12-02 22:12:33 404

原创 6.C转python(已删减)

2.可以用insert()函数增加列表任意位置的元素,参数一为插入的下标,而二为内容。若那个参数一超过了列表的最大下标,则会在列表末尾添加内容。12.元组除了其中的元素不能修改之外,其它的点和列表相同。4.可以使用index函数来找到当期那要找的元素的下标。但是对于键会有约束,对于值的话没有(键好像不能为列表)15.一个字典中可以有多个键值对,但是键不能相同。(1).可以使用+来拼接(二者加在一起)11.元组内的元素也可以是任意类型。可以用index来查找元素的下标。例:(用pop函数)

2023-12-02 10:56:53 436

原创 5.C转python(已删减)

5.也可以这样写,但我不喜欢,而且这样写的话相当于是创建了i作为变量并不断修改使之化为一个那相当于是数组中的元素的临时变量,所以这种方式不能对数组内元素进行修改。16.在python中,在同一个列表中,可以放不同类型的变量(也可以放下列表)3.当切片中的范围超出列表范围时,不会越界访问。4.关于切片操作,元组也可以,字符串也大致可以。步长可以为负数,意思是从后往前取。2.使用list函数来创建列表。将两个全省略掉则就是该列表本身。2.切片操作还可以取步长。

2023-12-01 17:06:43 453

原创 4.C转python(已删减)

但是若想在函数内部修改全局变量,则要加一个关键字 global,否则就是创立一个局部变量。12.在函数调用传参步骤中,可以指定某个参数传参。7.函数功能尽量单一(例如:让逻辑和交互分离)3.如果只是定义而不调用则函数不会执行。用一个函数的返回值作为另一个函数的参数。12.变量会有作用域,与C应该一致。函数内部的变量名只能在函数内部生效。

2023-12-01 16:26:41 348

原创 3.C转python(已删减)

11.if 和while那些东西的条件表达式返回值为BOOL值(1的返回值也是True)10.continue 立即结束当前的循环,进入下一个循环。12.注意在python中str可以直接进行用==互相比较。18.time.sleep(1)是暂停一秒。1.int()默认是按照十进制来转换的。13.range函数参数只能为整数。4.用好pass语句(小写即可)16.现况可以多写点if和循环。2.在python中没有字符。7.死循环有时不是Bug。

2023-11-30 11:29:21 385

空空如也

空空如也

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

TA关注的人

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