- 博客(14)
- 问答 (1)
- 收藏
- 关注
原创 模拟实现memmove函数
在实现memmove函数时,需要注意目标和源头两部分在内存中的位置关系,因为memmove函数是可以重叠内存区域的。 目标区域和源区域的位置关系可以分为三种。 第一种:目标的内存位置小于源内存位置,在移动源数据时选择从前向后的方式进行移动。 第二种:目标的内存位置大于源内存位置,在移动源数据时选择从前向后的方式进行移动。 第三种:目标区域与源区域重叠,并且目标的内存位置大于源内存位置。在移动源数据时选择从后向前的方式进行移动。 按照以上三种方式移动源数据,就不会出现还未移动,数据就已经被覆盖的情况。
2021-09-30 16:24:03
208
原创 环形链表找环的起点
1、给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 说明:不允许修改给定的链表 输入:head = [3,2,0,-4] 输出:返回索引为 1 的链表节点 解释:链表中有一个环,其尾部连接到第二个节点。 解题思路: 1、使用快慢指针,先判断是否有环 快指针每一次走两步,慢指针一次走一步。 如果链表存在环,那么快指针与慢指针一定会在环中某个位置相遇。 2、若存在环,此时慢指针 相遇时,fast 指针已经走完了环的 n 圈,因此它走过的总距离为 a+n(b+c)+b=a+(n+
2021-09-24 12:58:55
975
原创 移除未排序链表中的重复节点,保留最开始出现的节点
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 示例1: 输入:[1, 2, 3, 3, 2, 1] 输出:[1, 2, 3] 示例2: 输入:[1, 1, 1, 1, 2] 输出:[1, 2] 提示: 链表长度在[0, 20000]范围内。 链表元素在[0, 20000]范围内。 //思路:创建一个大于20000的数组,使用0和1标记数字是否出现过 struct ListNode* removeDuplicateNodes(struct ListNode* head) {
2021-09-23 21:17:28
352
原创 结构体对齐规则
结构体对齐规则: 1、第一个成员在于结构体变量偏移量为0的地址处。 2、其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 对齐数 = 编译器默认的一个对齐数 与 该成员大小的 较小值。 3、结构体总大小为最大对齐数(每个成员变量都有自己的对齐数)的整数倍。 4、针对嵌套结构体,嵌套的结构体要对齐到自己最大对齐数的整数倍处,结构体总体大小是所有对齐数的最大值(包含嵌套结构体的对齐数)的整数倍。 下面,来看一个考察结构体对齐方式的面试题: 1、已知结构体成员d的地址为p1,请获取成员变量b的地
2021-09-23 13:09:18
3212
原创 使用递归的方式模拟strlen函数
//************************************************************************************// ////// 使用递归的方式模拟strlen函数 //////************************************************************************************// int my_strlen(const char *str) { if (*str == '\0
2021-08-03 21:33:04
183
原创 在杨氏矩阵中查找是否存在指定数字,计算次数小于O(N)
//************************************************************************************// // 杨氏矩阵,从左到右依次增加,从上到下依次增加 // 在矩阵中查找是否存在指定数字 // 计算次数小于O(N) //************************************************************************************// // 思路:比较矩阵右上角或者左下角的值
2021-08-03 21:31:25
109
原创 判断一个字符串是否为另一个字符串旋转前的字符串
//************************************************************************************// //// 判断一个字符串是否为另一个字符串旋转前的字符串 //************************************************************************************// //// 思路:叠加判断 ////对原始字符串str1进行扩展,str1 = str1 + st
2021-08-03 21:27:22
128
原创 三步逆序法 ---左旋 n 个字符串
#include<stdio.h> #include<string.h> #include<assert.h> //************************************************************************************// //// 三步逆序法 ////左旋 n 个字符串 //******************************************************************
2021-08-03 21:25:35
118
原创 模拟实现 strstr 函数
模拟实现 strstr 函数: #include<stdio.h> #include<string.h> #include<assert.h> char* my_strstr(const char* p1, const char* p2) { assert(p1); assert(p2); char* s1 = p1; char* s2 = p2; char* cur = p1; if (*p2 == '\0') { return p1; } w
2021-08-03 21:23:09
142
原创 用二分法在数组中找特定数字
//// 使用二分法查找数字 /// //// 找到后返回下标,找不到返回-1 #include<stdio.h> #include<string.h> int search_num(int arr[],int k,int sz) { //int sz = sizeof(arr) / sizeof(arr[0]); int left = 0; int right = sz - 1; while (left <= right) { int mid = (l
2021-07-20 20:43:40
229
原创 使用C语言,判断一个数是否为素数
使用C语言,判断一个数是否为素数 // 如果一个数 m 不能被 2~根号下m 之间的整数整除,其必定为素数。 #include<stdio.h> #include<string.h> int main() { int x,q; scanf_s("%d",&x); if (x > 1) { for (q = 2; (q * q) <= x; q++) { if (x % q == 0) { break; } } if ((q * q) <= x) { prin
2021-07-20 20:32:09
925
1
原创 VS2019中使用strcpy
VS2019中使用strcpy #include <stdio.h> #include <string.h> int main() { char str1[] = “Sample string”; char str2[40]; char str3[40]; strcpy_s(str2,40, str1); strcpy_s(str3,40, “copy successful”); printf(“str1: %s\nstr2: %s\nstr3: %s\n”, str1, str2,
2021-07-20 20:28:24
3512
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人