
5月6号考核
发布日期:2021-05-15 01:05:03
浏览次数:17
分类:精选文章
本文共 5280 字,大约阅读时间需要 17 分钟。
C语言代码示例与实现
以下是一些常见于C语言程序员日常工作的代码片段,涵盖排序算法、链表操作、字符串操作等内容,每段代码后都附有简要注释和实现思路。
一、快速排序算法实现
#include#include int main(void) { int len; scanf("%d", &len); int* nums = (int*)malloc(sizeof(int) * len); for (int i = 0; i < len; ++i) { scanf("%d", nums + i); } int target, i, j; scanf("%d", &target); for (i = 0, j = len - 1; i < j;) { if ((nums[i] + nums[j]) > target) { j--; } else if ((nums[i] + nums[j]) < target) { i++; } else { printf("[%d,%d]", nums[i], nums[j]); break; } } return 0;}
算法描述
这个代码实现了一个快速排序算法的思路,其中使用两个指针,左指针从数组起点,右指针从数组终点。通过比较两个指针所指的元素和目标值的和,决定移动指针的位置。当发现和等于目标值时,输出这对元素并结束程序。这种方法在数据层面上复杂度较低,适合处理较短的数组。
二、双链表的合并操作实现
#include#include typedef struct LinkList { int val; struct LinkList* next;} Node;Node* creat() { int n; puts("输入长度"); scanf("%d", &n); Node* head = (Node*)malloc(sizeof(Node)); Node* end = head; for (int i = 0; i < n; ++i) { Node* node = (Node*)malloc(sizeof(Node)); scanf("%d", &node->val); end->next = node; end = node; } end->next = NULL; return head;}void print(Node* head) { while (head->next) { printf("%d ", head->next->val); head = head->next; }}int main(void) { Node* head1 = creat(); Node* head2 = creat(); Node* newhead = (Node*)malloc(sizeof(Node)); Node* t1 = head1->next, * t2 = head2->next, * p = newhead; while (t1 && t2) { if (t1->val <= t2->val) { p->next = t1; p = t1; t1 = t1->next; } else if (t1->val > t2->val) { p->next = t2; p = t2; t2 = t2->next; } } if (t1 == NULL) { p->next = t2; } if (t2 == NULL) { p->next = t1; } print(newhead); return 0;}
算法描述
这个代码实现了对两个双链表的合并操作。通过不断地比较两个链表的当前节点的值,决定将哪一个节点加入新的合并链表中。合并完成后,输出最终的链表内容。整个过程类似于合并两个有序数组的过程。
三、字符串交错排列工具
#include#include int main(void) { char word1[101]; char word2[101]; char word3[101]; gets(word1); gets(word2); memset(word3, 0, sizeof(word3)); int len1 = strlen(word1); int len2 = strlen(word2); int i = 0, j = 0, len = 0; for (; i < len1 && j < len2;) { if (len % 2 == 0) { word3[len++] = word1[i++]; } else { word3[len++] = word2[j++]; } } if (i == len1) { while (word2[j]) { word3[len++] = word2[j++]; } } if (j == len2) { while (word1[i]) { word3[len++] = word1[i++]; } } word3[len] = 0; puts(word3); return 0;}
算法描述
这个代码实现了一个字符串交错排列的功能。通过遍历两个字符串的字符,交替将字符拷贝到目标字符串中。当其中一个字符串的末尾被拷贝完后,剩下的字符也被依次拷贝到目标字符串中,最终输出结果。这种方法类似于合并两个字符序列,但以特定的顺序进行。
四、字符串乘法功能
#include#include #include #define M 10005char s1[M], s2[M], s[M];int a[M], b[M], c[M];int main(void) { int i, j, m, n, k; int flag1 = 1; int flag2 = 1; gets(s1); gets(s2); memset(c, 0, sizeof(c)); n = strlen(s1); m = strlen(s2); if (s1[0] == '-') { flag1 = -1; } if (s2[0] == '-') { flag2 = -1; } k = n + m; /*把字符串s1和s2逆序用数字排列*/ for (i = 0; i < n; i++) { if (flag1 == -1) { if (i == n - 1) { break; } } a[i] = s1[n - i - 1] - '0'; } for (i = 0; i < m; i++) { if (flag1 == -1) { if (i == n - 1) { break; } } b[i] = s2[m - 1 - i] - '0'; } /* 乘运算*/ for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { c[i + j] += a[i] * b[j]; } } for (i = 0; i <= k; i++) { if (c[i] >= 10) { c[i + 1] += c[i] / 10; c[i] %= 10; } } /*去除前导0*/ i = k; while (c[i] == 0) { i--; } /*判断两个非负数之积是否为0,以及逆序打印c[]*/ if (i < 0) { printf("0"); } else { if (flag1 * flag2 == -1) { printf("-"); } for (; i >= 0; i--) { printf("%d", c[i]); } } printf("\n"); return 0;}
算法描述
这个代码实现了一个字符串乘法功能,将两个字符串按照数值方式进行操作。首先将字符串逆序转换为数字数组进行乘法运算,乘法完成后再逆序转换回字符串,处理负号和前导零等问题,最终输出结果。
五、生成排列序列代码
#includeint book[10]; //标记数组int find[10]; //答案数组int len;void print(int n) { for (int i = 1; i <= n; ++i) { printf("%5d", find[i]); } printf("\n");}void dfs(int step, int n) { if (step == n + 1) { print(n); //输出这种排列 return; //注意,输出后一定要返回 } for (int i = 1; i <= n; ++i) { if (book[i]) { //如果i被使用过,继续找没使用过的i continue; } //找到未被使用的i book[i] = 1; //标记它 find[step] = i; //把它放到答案里 dfs(step + 1, n); //继续找下一个位置 //注意,是一步步返回的,一定要在每步结束后把标记归0 book[i] = 0; } return;}int main(void) { int n; scanf("%d", &n); book[10] = { //初始化数组 0 }; DFS(1, n); return 0;}
算法描述
这个代码实现了一个生成全排列的深度优先搜索(DFS)算法。使用标记数组记录每个数字是否已经使用过,然后通过递归的方式生成所有可能的排列序列。一旦生成完整的排列(所有元素被使用),就记录下来并输出结果。
以上是几种常见C语言代码片段的实现与优化描述,每个代码都附有详细的注释和算法思路,供开发者参考和学习。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月24日 18时56分29秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
centos7一步一步搭建docker jenkins 及自定义访问路径重点讲解
2019-03-06
【Flink】Flink 底层RPC框架分析
2019-03-06
MySQL错误日志(Error Log)
2019-03-06
解决:angularjs radio默认选中失效问题
2019-03-06
windows环境下安装zookeeper(仅本地使用)
2019-03-06
缓冲区溢出实例(一)--Windows
2019-03-06
Python中字符串前添加r ,b, u, f前缀的含义
2019-03-06
Hadoop学习笔记—Yarn
2019-03-06
JSONPath小试牛刀之Snack3
2019-03-06
Jenkins - 部署在Tomcat容器里的Jenkins,提示“反向代理设置有误”
2019-03-06
wxWidgets源码分析(3) - 消息映射表
2019-03-06
wxWidgets源码分析(5) - 窗口管理
2019-03-06
wxWidgets源码分析(7) - 窗口尺寸
2019-03-06
wxWidgets源码分析(8) - MVC架构
2019-03-06
wxWidgets源码分析(9) - wxString
2019-03-06
[白话解析] 深入浅出熵的概念 & 决策树之ID3算法
2019-03-06
[梁山好汉说IT] 梁山好汉和抢劫银行
2019-03-06
[源码解析] 消息队列 Kombu 之 基本架构
2019-03-06
[源码分析] 消息队列 Kombu 之 启动过程
2019-03-06
抉择之苦
2019-03-06