- 博客(49)
- 收藏
- 关注
原创 【数据结构】随机链表的复制(难题)
指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。个节点组成的链表来表示输入/输出中的链表。的链表,每个节点包含一个额外增加的随机指针。,该指针可以指向链表中的任何节点或空节点。那么在复制链表中对应的两个节点。例如,如果原链表中有。返回复制链表的头节点。
2025-07-20 21:08:50
66
原创 【数据结构】单链表练习(有环)
结论:一个指针从相遇点开始走,另一个指针从起始点开始走,他们会在入口点相遇。fast走的路程:L+N*C+X。slow走的路程:L+X。
2025-07-15 18:52:48
259
原创 【数据结构】单链表练习
给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。将两个有序链表合并为一个新的有序链表并返回。现有一链表的头指针 ListNode*
2025-05-27 16:03:33
606
原创 【C语言】宏经典练习题,交换奇偶位
只需要对该二进制位进行按位与01010101即可,而01010101的十六进制数为0x55555555再向前移动一位就可变成偶数位。而偶数位同理,将二进制数与10101010进行按位与操作即可,10101010的十六进制数为0xaaaaaaaa再向后移动一位。奇数位01010101。写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。假设这个数的二进制是11111111。
2025-05-12 14:54:53
251
原创 【C语言】程序的预处理,#define详解
文章主要介绍了C语言中的预处理指令及其应用。首先,通过#define可以定义标识符和宏,标识符用于替换代码中的特定内容,而宏则可以进行简单的条件判断和参数替换。文章还介绍了#和##的用法,#将宏参数转换为字符串,##用于连接两个符号。接着,讨论了宏与函数的优缺点,宏在编译时展开,执行效率高,但可能导致代码膨胀和调试困难。此外,#undef用于移除宏定义。文章还介绍了条件编译,通过#if、#elif、#else和#endif实现选择性编译,并展示了如何判断宏是否定义。最后,提供了两种解决头文件多次包含问题的方
2025-05-11 15:52:19
219
原创 【C语言】单身狗问题or找不同问题用异或来解决
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。有数组的元素是:1,2,3,4,5,1,2,3,4,6。编写一个函数找出这两个只出现一次的数字。只有5和6只出现1次,要找出5和6.
2025-05-10 16:15:32
126
原创 【C语言】文本操作函数fseek、ftell、rewind
重新定位文件指针的位置,使其指向以origin为基准、偏移offset字节的位置。成功返回0,失败返回非零值(通常为-1。
2025-05-01 15:21:37
460
原创 【C语言】文本操作函数fgetc、fputc、fgets、fputs、fprintf、fscanf、fread、fwrite
从文件中读取信息,每次读取一个字符从建盘中输入信息到文件中,每次输入一个字符。
2025-04-23 19:42:20
994
原创 【C语言】柔性数组
如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户。用户调用free可以释放结构体,但是用户并不知道这个结构体内的成员也需要free,所以你不能指望用户来发现这个事。所以,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。这样柔性数组成员a,相当于获得了100个整型元素的连续空间。连续的内存有益于提高访问速度,也有益于减少内存碎片。第一个好处是:方便内存释放。大小不包括柔性数组的内存。
2025-03-30 16:40:13
163
原创 【C语言】动态内存管理用realloc管理更灵活
在堆空间上另找一个合适大小的连续空间来使用。这样函数返回的是一个新的内存地址。要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发生变化。由于上述的两种情况,realloc函数的使用就要注意一些。realloc——动态内存空间管理更灵活。
2025-03-16 14:32:55
253
原创 【C语言】动态内存开辟与释放函数malloc和free
所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。(要进行强制类型转化)如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的。如果参数size为0,malloc的行为是标准是未定义的,取决于编译器。这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果参数ptr是NULL指针,则函数什么事都不做。如果开辟成功,则返回一个指向开辟好空间的指针。
2025-03-16 13:07:54
177
原创 【C语言】内存操作函数memcpy、memmove、memset(最最最好懂)
memmove( )比 memcpy( )更安全,在目标区域和源区域有重叠的情况下,memmove( )的拷贝确保源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改,但目标区域与源区域没有重叠情况时与memcy( )函数相同。将一块内存区域的每个字节设置为指定的值。memmove——重叠内存的拷贝。模拟实现my_memmove函数。模拟实现my_memcpy函数。memset——内存设置函数。memcpy——内存块复制。从源头指向的内存块拷贝固定。的数据到目标指向的内存块。
2025-03-12 16:27:19
335
原创 【C语言】寻找错误信息用strerror或perror函数(最最最好懂)
相当于perror = printf + strerror。直接打印错误信息,在打印错误信息前会先打印自定义信息。perror——返回错误码对应的错误信息更简单。strerror——返回错误码对应的错误信息。多使用strsrror查bug。把错误码翻译成错误信息。
2025-03-11 19:53:32
260
原创 【C语言】字符串的查找用strstr、strtok(最最最好懂)
返回一个指向haystack中第一次出现needle的指针。如果未找到子字符串,则返回NULL。strstr( )函数用于查找子字符串在主字符串中的第一次出现。自己写my_strstr函数实现字符串查找功能。strstr——字符串的查找。
2025-03-10 19:05:39
196
原创 【C语言】理解函数strncat、strncpy、strncmp使用方法(最最最好懂)
char* strncat(char* dest, const char* src, int n)中n的作用。strncpy函数用于将一个字符串复制到另一个字符串。设置为 5,这样函数最多只会复制 5 个字符到。中,只需要追加其中的一部分。剩余空间只能容纳 5 个字符,那么可以将。的值来控制追加的字符数量。,我们只需要追加前 3 个字符,就可以将。str1>str2 返回大于0的数。str1<str2 返回小于0的数。的剩余空间有限时,使用。结果为abcxxxxxxx。str1=str2 返回0。
2025-03-06 21:15:00
340
原创 【C语言】冒泡排序及使用回调函数方法
运用循环的方法,从左到右相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。一个通过函数指针调用的函数,如果把函数指针(地址)作为参数传递给另一个函数,这个指针被用来调用其指向的函数时,就叫回调函数。用回调函数模拟实现qsort,采用冒泡方式。
2025-02-26 18:25:57
207
原创 【C语言】查找字符串旋转结果(字符串左旋进阶版)两种方法
连用两个arr1,AABCDAABCD在这个字符串里面找是否有arr2。写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 = AABCD和s2 = BCDAA,返回1。给定s1 = abcd和s2 = ACBD,返回0.AABCD左旋一个字符得到ABCDA。AABCD左旋两个字符得到BCDAA。AABCD右旋一个字符得到DAABC。
2025-02-25 20:27:34
185
原创 【C语言】理解函数strcat、strcpy、strcmp、strstr使用方法(最最最好懂)
用于追加字符串的函数,即将一个字符串中的内容追加到另一个字符串后面(不会覆盖原字符串内容)。结果为DE(arr1中的ABC被arr2中的DE完全覆盖)比较的是两个字符串中对应位置字符的ASCII值。将一个字符串中的内容拷贝到另一个字符串中(结果为 hello world。比较两个字符串内容的函数。
2025-02-25 18:15:55
242
原创 【C语言】字符串左旋与字符串逆序大同小异
实现一个函数,可以左旋字符串中的k个字符。ABCD左旋一个字符得到BCDA。ABCD左旋两个字符得到CDAB。BA GFEDC 左逆序 右逆序。方法二:部分左旋再整体左旋。CDEFGAB 整体逆序。方法一:利用循环进行左旋。
2025-02-25 17:03:40
168
原创 【C语言】在杨氏矩阵中查找一个数是否存在
杨氏矩阵:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。可以运用数组,也可以运用指针进行查找。要求:时间复杂度小于O(N);
2025-02-25 16:00:57
108
原创 【C语言】猜名次,猜凶手很easy
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。已知3个人说了真话,1个人说的是假话。
2025-02-15 10:43:30
147
原创 【C语言】用指针来输出二维数组
指的是一个有10个元素的数组 p,这个数组 p 的类型是 int * 型,指向的是数组p首元素的地址,元素的类型都是 int 型。下列代码中的数组是二维数组,int ( * p) [ 4 ]是指取到数组 p 首元素的地址,再运用循环的形式找到下一行的元素。区别 int * p [10] 与 int ( * p) [10]指的是一个数组 p 有10个元素,每个元素的类型都是 int *型。
2025-02-12 20:04:02
125
原创 【C语言】用指针来输出数组内元素
int *p = arr 是指取数组arr首元素的地址,*(p+i)是指在首元素地址的基础上往前推进地址。int (* p) [10] = &arr 是指取整个数组的地址。(* p) [ i ] 是指通过数组下标找到地址再找到对应数值。
2025-02-10 21:48:58
152
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人