- 博客(40)
- 收藏
- 关注
原创 学习数据结构(11)二叉树(堆)下
如果有⼀个集合 K = {k0,k1,k2,...,k(n-1)} ,把它的所有元素按完全二叉树的形式存储在一个一维数组中,并满足:K(i)<=2*i+1且K(i)<=2*i+2(K(i)>=2*i+1且K(i)>=2*i+2),i=0,1,2... ,则称为小堆(或大堆),将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆。通过向上调整或向下调整将数组排列成堆的结构(若要排升序,则建大堆,排降序,则建小堆),将数组开头的元素和末尾的元素交换,将此时数组开头的元素看作双亲,向下调整。
2025-02-19 22:23:09
650
原创 学习数据结构(10)栈和队列下+二叉树(堆)上
将不为空队列中前Size-1个元素入队列进另一个为空的队列中,同时将前Size-1个元素从不为空队列中出队列,则原先不为空队列中只剩一个元素,取队头数据,再将此数据出队列,返回队头数据。先判断q1队列是否为空,若为空,则将元素入队列q1,否则将元素入队列q2,即将元素入队列进不为空的队列中,但第一次入队列时,尽管q1,q2都为空,元素仍会入队列q2。题目要求实现的函数有六个,分别是初始化队列,入队列,从队列开头移除并返回元素,返回队头元素,判空,销毁队列。当s1和s2都为空时,MyQueue为空。
2025-02-15 23:29:36
753
原创 学习数据结构(9)栈和队列上
遍历字符串,遇到左括号则入栈,遇到右括号时,判断栈是否为空,是则,销毁栈,直接返回false,不是则取栈顶数据,判断栈顶数据是否与右括号相对应,是则将栈顶数据出栈,不是则销毁栈,直接返回false,循环结束,判断栈是否为空,为空则说明括号全部配对,返回true,不为空则只有一种可能:栈中有未配对的左括号,返回false。队列是只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特点,进行插入操作的一端称为队尾,进行删除操作的一端称为队头。
2025-02-13 00:23:41
375
原创 学习数据结构(8)双向链表
顺序表在随机访问,频繁访问上具有优势,链表在任意位置插入或删除数据上具有优势,顺序表可能存在空间浪费,链表不存在空间浪费。传一级指针:(能保持接口一致性)双向链表一般指带头双向循环链表。
2025-02-10 20:45:08
437
原创 学习数据结构(7)单链表OJ下+链表分类
C为环形部分的周长,假设slow刚到入环节点时,fast在如图所示的位置,此时fast与slow之间的距离为N,由于fast每次走三步,slow每次走一步,所以每运动一次fast和slow之间的距离就会减少两步,若N为偶数,则N不断减2最终可以为0,即fast和slow相遇,若N为奇数,N会减为-1,此时slow和fast错过,fast和slow之间的距离变为C-1,若C-1为偶数(即C为奇数),则fast和slow可以相遇,若C-1为奇数(即C为偶数),则fast和slow还是不能相遇,最终也不会相遇。
2025-02-09 11:12:50
940
原创 学习数据结构(6)单链表OJ上
创建新的空链表,在两个指针都不为NULL的条件下,两个指针分别同时遍历两个链表,每次遍历比较节点中数据的大小,小的数据节点尾插到新链表中,退出循环后,将不为空的链表指针以后的所有节点尾插到新链表中,但这种方法由于新链表为空链表,在插入第一个节点时与插入后面的节点写法不同,造成代码比较冗杂。:(我的解法)遍历链表,得到节点个数,节点个数除以二,得到从头节点到中间节点的遍历次数,再遍历链表,找到中间节点,但较复杂。(参考代码)和解法一类似,但对起始的三个相邻节点的选择不同,且更加简洁。
2025-02-07 00:28:12
345
原创 学习数据结构(4)顺序表+单链表
链表中每个节点都是独立申请的(即需要插入数据时才去申请⼀块节点的空间),需要通过指针 变量来保存下一个节点位置才能从当前节点找到下一个节点。节点⼀般是从堆上申请的,从堆上申请来的空间,是按照⼀定策略分配出来的,每次申请的空间可能连续,可能不连续。链表是⼀种物理存储结构上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。节点的组成主要有两个部分:当前节点要保存的数据和保存下⼀个节点的地址(指针变量)链式结构在逻辑上是连续的,在物理结构上不⼀定连续。
2025-01-29 16:08:29
534
原创 学习数据结构(3)顺序表
(注意要保证有效数据个数不为0且pos大于等于0,小于有效数据个数,当pos等于0时相当于头部删除,当pos等于有效数据个数-1时相当于尾部删除)(注意要保证pos大于等于0,小于等于有效数据个数,等于0时相当于头部插入,等于有效数据个数时相当于尾部插入)(这里注意要保证有效数据个数不为0)
2025-01-28 11:57:51
576
原创 学习数据结构(2)空间复杂度+顺序表
函数栈帧在编译时已经确定了,只需要关注函数在运行时额外申请的空间,有size_t end、size_t i、int exchange 三个额外创建的变量,F(N)=3,故空间复杂度为O(1)顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,顺序表的底层结构是数组,对数组的封装,实现了常用的增删改查等接口。递归算法的空间复杂度=单次递归的空间复杂度*递归次数,每调用一次递归函数开辟一个函数栈帧,这里调用了N次,空间复杂度为O(N)(这是作者在百度上找的图)
2025-01-26 23:45:06
1379
原创 学习数据结构(1)时间复杂度
若要查找的字符在字符串第一个位置,T(N)=1,若要查找的字符在字符串最后一个位置,T(N)=N,若要查找的字符在字符串中间位置,T(N)=N/2或N/2+1(N是偶数),或T(N)=(N+1)/2(N是奇数),因此,Fucn5的时间复杂度分为:最好情况:O(1),最坏情况:O(N),平均情况:O(N)T(N)=M+N,若M和N相差不大,T(N)可看成2N或2M,若M>>N,T(N)=M,若M<<N,T(N)=N,故时间复杂度为O(N)T(N)=N^2+2*N+10,只保留最高次项,则时间复杂度为O(N)
2025-01-25 20:20:25
863
原创 复习C语言(2)
strlen函数遇\0结束,所以要找数组中第一次出现0的位置,由于数组是字符型数组,所以只需使-1--i补码的后八位全为0即可,-1的补码为11111111111111111111111111111111,当i=255(00000000000000001111111111111111)时,a[i]为0,所以strlen(a)=255。(3,4)是逗号表达式,逗号表达式的值为最后一个表达式的值,即4,那么数组中有4个元素,共16个字节。5>若输入字符中含有非数字字时,返回非数字自负前面的数字。
2025-01-19 01:48:16
365
原创 复习C语言(1)
按照课程安排,作者的C语言理论学习基本结束,今天开始开一个新的C语言复习系列,收集整理在C语言复习过程中发现的遗漏点以及C语言的编程题。
2024-10-27 18:35:55
251
1
原创 学习C语言(25)
C语言设置了一些预定义符号,可以直接使用,预定义符号是在预处理期间处理的__FILE__(进行编译的源文件)__LINE__ (文件当前的行号)__DATE__(文件被编译的日期)__TIME__ (文件被编译的时间)__STDC__(如果编译器遵循ANSI C,其值为1,否则未定义)(VS2022没有完全遵循ANSI C,未定义)例:#define MAX 1000;case(注:定义的内容如果过长,可以分行写,在分开的处加一个续行符\即可)
2024-10-20 21:34:03
975
原创 学习C语言(23)
上面的适用于所有输入流一般指适用于标准输入流和其他输入流(如文件输入流);所有输出流一 般指适用于标准输出流和其他输出流(如文件输出流)
2024-10-06 00:49:16
1056
1
原创 学习C语言(21)
编译器只为联合体最大的成员分配足够的内存空间,联合体的特点是所有成员共用同⼀块内存空间。所以联合体也叫:共用体给联合体其中一个成员赋值,其他成员的值也跟着变化。
2024-09-28 23:24:30
1123
原创 学习C语言(20)
如:structint a;char b;float c;}x;char b;float c;}a[20],*p;上面两个结构在声明的时候省略掉了结构体标签在上面代码的基础上,p=&x;是不合理的编译器会把上面的两个声明当成完全不同的两个类型,所以是非法的,匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使用⼀次。
2024-09-25 23:12:26
908
原创 学习C语言(19)
数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容保存在内存的低地址处。数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容保存在内存的高地址处。整型提升:11111111 11111111 11111111 10000000。和momcpy的差别是memmove函数处理的源内存块和目标内存块是可以重叠的。memset是用来设置内存的,将内存中的值以字节为单位设置成想要的内容。超过⼀个字节的数据在内存中存储的时候,会遇到存储顺序的问题。(1)设计一个小程序来判断当前机器的字节序。
2024-08-30 23:54:12
407
原创 学习C语言(16)
arr为字符数组中第一个元素的地址,解引用后为字符a,字符a的ASC||码值为97,strlen函数默认把97看作地址,向后统计字符串长度,97作为地址的空间不一定属于当前程序,程序可能会报错。int arr[i][j]中arr表示二维数组名,a[i]表示一维数组名,有时可作地址,arr表示地址时指整个首个一维数组的地址(二维数组可以看作元素为一维数组的数组)初始化数组的大括号中很容易看成大括号,这里是小括号,表示逗号表达式,所以数组初始化实际上是{1,3,5,0,0,0}这种写法是把a的地址赋给p。
2024-08-19 23:21:45
526
原创 学习C语言(10)
在n=n&(n-1)中,当n末位是1时,-1后为0,结果末位必是0,则必少一个1;当n末位是0时,n-1打乱了末位前的分布,必出现错位,有错位必出0,则必少一个1;有符号整数的三种表示⽅法均有符号位和数值位两部分,2进制序列中,最⾼位的1位是被当做符号位,剩余的都是数值位。符号位都是用0表示“正”,⽤1表示“负”,无符号整数全为数值位。(1)结构体是自定义的数据类型,结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量,如:标量,数组,指针,甚至是其他结构体。
2024-08-03 00:19:20
612
原创 学习C语言(9)
(1)bug指程序漏洞,调试(debug)是寻找程序中存在的问题的过程(2)Debug通常称为调试版本 ,包含调试信息,不做任何优化,便于程序员调试程序Release称为发布版本,往往进行了各种优化,不包含调试信息,便于客户使用。
2024-07-30 23:59:02
557
原创 学习C语言(8)
(1)单个文件C语言编译器对源代码进行编译是从第一行往下扫描的,如果在函数调用之前没有发现函数的定义,就会报警告,为了解决这个问题,应该在函数调用之前先声明这个函数,声明函数需要交代清楚函数的返回类型,函数名,和函数的参数(相当于函数定义的第一行),函数声明中参数只保留类型,省略掉名字也是可以的函数的定义也是一种特殊的声明,所以也可以把定义放在调用之前(2)多个文件一般情况下,函数的声明,类型的声明放在头文件(.h)中,函数的实现放在源文件(.c)中。
2024-07-24 14:14:14
395
原创 学习C语言(7)
(1)语法形式ret_type fun_name(形式参数)·ret_type是函数返回类型,有时候返回类型可以是void,表示什么都不返回·fun_name是函数名,最好有意义·函数的参数也可以是void,明确表示函数没有参数,如果有,要交代清楚参数的类型和名字以及个数·大括号括起来的部分是函数体,是完成计算的过程(2)自定义函数举例写一个加法函数,完成2个整型变量的加法操作其中main是主调函数,add是被调函数。
2024-07-23 15:22:12
728
原创 学习C语言(6)
(1)数组创建语法type arr_name[常量值]类型 数组名 指定数组大小(2)数组的初始化完全初始化:如:int arr[5]={1,2,3,4,5};不完全初始化:如:int arr[5]={1};(第一个元素初始化为1,剩余元素默认初始化为0)(3)数组类型数组的类型算是一种自定义类型,去掉数组名剩下的就是数组的类型如:int arr[5] 中arr数组的类型是 int[5](4)数组下标。
2024-07-21 13:21:38
690
原创 学习C语言(4)
scanf()将字符串读入字符数组时,不会检测字符串是否超过了数组长度,容易出错,所以为了防止这种情况,应该在使用%s时指定读入字符串的最长长度,即写成%[m]s。这个表达式不会报错,但由于关系运算符是从左到右计算,所以实际执行的是:(a<b)<c,a<b返回0或1,所以最终是0或1与变量c进行比较,应该改为:a<b &&b<c。(3)|| :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)(2)&& :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)
2024-07-17 12:55:38
581
原创 学习C语言(3)
(1)printf函数的作用是将参数文本输出到屏幕,f代表format(格式化),表示可以定制输出文本的格式,再使用这个函数之前,必须在源码文件头部引入stdio.h 头文件。printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n+1个·,如果参数个数少于对应的占位符,printf()可能会输出内存中的任意值。如:%5d 表示占位符的最小宽度为五位,不满五位添加空格,默认右对齐,左对齐为%-5d。除号的两端如果是整数,执行整数除法,得到商,忽略余数。
2024-07-15 23:31:39
923
原创 学习C语言(2)
更长的整型 long long [int] [signed] long long [int] unsigned long long [int](1)sizeof 操作符是专门用来计算sizeof的操作符数的类型长度的,单位是字节。短整型 short [int] [signed] short [int] unsigned short [int]长整型 long [int] [signed] long [int] unsigned long [int]
2024-07-14 14:01:56
514
原创 学习C语言(1)
库函数:用于提升效率的函数,由C语言标准规定,再由不同的编译器厂商根据标准进行实现提供给程序员使用。库函数的使用要包含对应的头文件。我希望能熟练掌握编程,学好专业知识,拓展学习面,成为一名优秀的工程师。在这段时间里,我打算先跟着课程学习,每周花大约二十小时在编程学习上,打好基础,再慢慢尝试实践。xxx.c---(编译器 cl.exe)-→xxx.obj---(链接器link.exe)-→二进制的可执行文件xxx.exe。我是一名准大学生,为了利用好暑期时间,提前学习计算机语言,从今天开始学习C语言。
2024-07-12 21:22:24
289
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人