C语言题目:链表数据求和操作
- IT业界
- 2025-08-31 21:33:02

题目描述
读入10个复数,建立对应链表,然后求所有复数的和。
输入格式无
输出格式无
样例输入 1 2 1 3 4 5 2 3 3 1 2 1 4 2 2 2 3 3 1 1 样例输出 23+23i 代码功能概述createNode 函数:
创建一个包含 10 个复数节点的链表。
每个节点存储复数的实部 (real) 和虚部 (image)。
sumNode 函数:
遍历链表,计算链表中所有复数的和。
释放链表中的节点内存,并输出最终的求和结果。
main 函数:
调用 createNode 创建链表。
调用 sumNode 对链表中的复数进行求和。
代码解析 1. 头文件和结构体定义 #include <stdio.h> #include <stdlib.h> typedef struct Node { int real; int image; struct Node *next; } Node;#include <stdio.h>:包含标准输入输出函数(如 scanf 和 printf)。
#include <stdlib.h>:包含内存管理函数(如 malloc 和 free)。
typedef struct Node:定义了一个链表节点结构体 Node,包含:
real:存储复数的实部。
image:存储复数的虚部。
next:指向下一个节点的指针。
2. 创建链表函数 (createNode) Node *createNode() { Node *head, *p, *q; head = (Node*)malloc(sizeof(Node)); // 创建头节点 p = head; for (int i = 0; i < 10; i++) { q = (Node*)malloc(sizeof(Node)); // 创建新节点 scanf("%d%d", &q->real, &q->image); // 输入实部和虚部 q->next = NULL; // 新节点的下一节点初始化为 NULL p->next = q; // 将新节点链接到链表 p = q; // 移动指针到新节点 } return head; // 返回链表头指针 }head:链表的头节点。
p 和 q:指针变量,用于遍历链表和创建新节点。
循环 10 次:创建 10 个复数节点,每次输入一个复数的实部和虚部。
链表链接:每个新节点的 next 指向新分配的节点,形成链表。
3. 链表求和函数 (sumNode) void sumNode(Node *head) { Node *newNode = (Node*)malloc(sizeof(Node)); Node *p = head->next; // 从第一个数据节点开始 Node *q; newNode->real = 0; // 初始化求和的实部和虚部 newNode->image = 0; newNode->next = NULL; while (p != NULL) // 遍历链表 { newNode->real += p->real; // 累加实部 newNode->image += p->image; // 累加虚部 q = p; // 保存当前节点指针 p = p->next; // 移动到下一个节点 free(q); // 释放当前节点内存 } printf("%d+%di\n", newNode->real, newNode->image); // 输出求和结果 return newNode; // 返回求和节点指针(注意:返回类型不正确,应该是 void) }newNode:用于存储求和结果的新节点。
p:遍历链表的指针,从头节点的下一个节点开始。
while 循环:遍历链表中的每个节点,累加实部和虚部。
释放内存:每次遍历一个节点时,释放该节点的内存。
输出结果:以 实部+虚部i 的格式输出求和结果。
4. 主函数 (main int main(void) { Node *head; head = createNode(); // 创建链表 sumNode(head); // 求和并输出结果 return 0; }调用 createNode 创建链表。
调用 sumNode 对链表中的复数进行求和并输出结果。
注意事项内存泄漏:
sumNode 函数中释放了链表中的所有节点,但没有释放头节点 head。
如果需要完整的内存管理,应在 sumNode 函数中添加对 head 的释放。
sumNode 的返回值:
函数声明的返回类型是 void,但代码中返回了 newNode,这会导致编译错误。应移除或注释掉 return newNode;。
用户输入:
如果输入的复数个数少于 10 个,程序会崩溃。建议添加输入验证。
示例运行假设输入以下 10 个复数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20输出将是:
100+110i
总结这段代码实现了一个简单的链表复数求和功能,适合初学者学习链表的基本操作。
源代码 #include <stdio.h> #include <stdlib.h> typedef struct Node { int real; int image; struct Node *next; }Node; Node *createNode() { Node *head,*p,*q; head = (Node*)malloc (sizeof(Node)); p = head; for(int i = 0; i<10; i++) { q = (Node*)malloc(sizeof(Node)); scanf("%d%d",&q->real,&q->image); q->next = NULL; p->next = q; p = q; } return head; } void sumNode(Node *head) { Node *newNode = (Node*)malloc(sizeof(Node)); Node *p = head->next; Node *q; newNode->real = 0; newNode->image = 0; newNode->next = NULL; while (p != NULL) { newNode->real += p->real; newNode->image += p->image; q = p; p = p->next; free(q); } printf("%d+%di\n",newNode->real,newNode->image); return newNode; } int main(void) { Node *head; head = createNode(); sumNode(head); return 0; }C语言题目:链表数据求和操作由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C语言题目:链表数据求和操作”
上一篇
前端监控的具体实现细节
下一篇
普通报表入门