自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 初阶数据结构——单链表与双向链表及其应用

若为其他节点,需要通过头节点找到pos节点的前置节点prev节点,让prev节点的pnext指针指向pos节点的后置节点并释放pos节点即可。若不是空链表,那么就需要通过pcur指针寻找链表的尾节点(插入之前),并且让pcur停留在尾节点处,将尾节点的pnext指针赋予新申请的节点空间即可。注意:这里的“带头”跟单链表中我们说的“头节点”是两个概念,实际在单链表阶段称呼不严谨, 带头链表里的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这里“放哨的”。如果两个链表不存在相交节点,返回。

2024-05-17 20:19:28 945

原创 初阶数据结构——时间复杂度与空间复杂度

主要衡量一个算法运行所需要的额外空间。根据题目描述,该数组包含从0到 n 的所有整数,中间缺失了一个数字(0或 n 不会缺失),因此数组的长度和数组中最大的元素均为 n。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。根据异或运算的交换率,我们得出sum = (0 ^ 0 ^ 1 ^ 1 ^ 3 ^ 3) ^ 2 = 0 ^ 2 = 2。例如:当数组有5个元素,k 等于6,轮转6次的效果与轮转1次的效果相同,因此获得新的值,即 k = 6 % 5 = 1。

2024-05-07 21:09:20 1155

原创 初阶数据结构——顺序表以及通讯录的实现

注意:在代码中,Con就表示我们的SeqList结构体(改名后为Contact),通过SeqList的结构体指针找到对应储存联系人信息的数组(即SLdt* arr),找到对应的ID(即arr [ ret ] ),访问得到数组pInfo结构体的元素,即可修改。通过上述动态顺序表的实现,我们已经获得了两个文件:SL.h 和 SeqList.c 文件,接下来我们就可以使用这两个文件来实现通讯录项目。需要注意size的变化和数据移动的问题,头插过程中,数据是从后向前,依次向后移动一位,这样可以避免数据被覆盖。

2024-04-15 16:45:20 832

原创 C语言初阶——数据在内存中的存储详解

对与指数 E 来说,首先 E 是一个无符号数(unsigned int类型),因此存入内存时 E 的真实值必须再加上一个中间数,对于8位的 E(取值范围是0~255),这个中间数是127,对于11位的 E(取值范围是0~2047),这个中间数是1023。这时,浮点数的指数E等于-126(或者-1022)即为真实值,有效数字M不再加上第⼀位的1,直接还原为0.xxxxxx的小数,这样做是为了表示±0,以及接近于0的很小的数字。我们可以得出S=0,M=1.015,E=2。那么,S=1,M=1.01,E=2。

2024-04-11 23:38:35 651

原创 C语言初阶——文件操作详解

程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。

2024-04-10 19:00:12 939

原创 C语言初阶——动态内存管理详解

但是对于空间的需求,不仅仅是上述的情况。分析过程:char*类型的指针p为形参,单独开辟一块空间,当函数 GetMemory( ) 运行结束后,p指向的地址被销毁,这时str就还是空指针,所以无法输出str字符串,并且需要注意内存的释放。由于p是一个函数的局部变量数组的首元素地址,当函数GetMemory( ) 运行结束后,p所在的空间就被销毁了,所以p就是野指针。包含柔性数组成员的结构体使用 malloc( ) 函数进行内存的动态分配,并且分配的内存应该大于该结构体的大小,以适应柔性数组的预期的大小。

2024-04-10 18:08:12 700

原创 C语言初阶——字符及字符串函数详解

通过分析可知,str1 小于 str2,两字符串长度只差应该是小于0的数字,但是由于函数 strlen( ) 的输出结果的类型为size_t,差的结果只能为正数,所以无法显示正确结果。若source指向的字符串的长度小于num,只会将字符串中到 ‘\0’ 的内容追加到destination指向的字符串末尾(不会补充 ‘\0’ 字符)注: strtok( ) 函数会改变被操作的字符串,所以在使用该函数切分的字符串时一般都是临时拷贝的内容并且为可修改的类型。这些函数的使用都需要包含一个头文件。

2024-04-09 21:18:15 783

原创 C语言——指针详解 下

函数指针变量是用来存放函数地址的,未来可以通过地址调用函数。函数的地址就是函数名,Fun与&Fun完全等价。例如:将 unsigned int 改写为 uint。输出示例:那要把函数的地址存到⼀个数组中,那这个数组就叫函数指针数组。parr1 先和 [ ] 结合,说明parr1是数组,数组的内容是 int ( * )( ) 类型的函数指针。回调函数就是一个通过函数指针调用的函数。如果你把函数的指针作为参数传递给另⼀个函数,当这个指针被用来调用它指向的函数时,被调用的函数就是回调函数。

2024-04-08 22:19:16 1088

原创 C语言——指针详解 上

int*类型是存放地址的,int类型存放变量。其中pa为存放地址的指针变量,*pa的意思就是通过pa中存放的地址,找到指向的空间, 其实*pa就是变量a。指针的类型决定了,对指针解引用的时候有多大的权限(⼀次能操作几个字节)。例如: char* 的指针就只能访问⼀个字节,而 int* 的指针的解引用就能访问四个字节。由此可见,char* 类型的指针变量+1跳过1个字节,int* 类型的指针变量+1跳过了4个字节。结论:指针的类型决定了指针向前或者向后走一步距离多大。

2024-04-08 21:11:33 757

原创 C语言初阶——结构体详解

位段的几个成员共用同一个字节,有些成员的起始位置并不是某个字节的起始位置,这些位置是没有地址的。第二个int类型的对齐数为4,对齐到4的整数倍,占据第4 5 6 7号字节。其中2 3号字节被浪费了。注意:在VS2022环境中,位段的内存分配是从一个内存块(1B或4B)中,由高地址向低地址分配的,如果剩余的大小不够下一个元素的大小,则该内存块的剩余位置将舍弃,在下一个内存块(相较于高地址的一个)中继续存放。如果传递⼀个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。

2024-04-08 20:45:52 920 1

空空如也

空空如也

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

TA关注的人

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