解题思路:
题目是想求链表中复数之和,那么我们可以从链表入手,我的思路是:将第二个节点就当作是最后要求和的节点,把第二个节点之后的所有节点的数据都加在这个节点上,最后是输出headNode -> next(即第二个节点)。
自定义函数实现功能模块化
1、创捷链表createList
2、创建节点createNode
3、插入节点insertNodeByHead(这里用的是头插入)
4、复数求和
5、链表打印printList
参考代码:
#include <stdio.h> #include <stdlib.h> struct Number{ int real; //realPart,实部 int imagin; //imerginaryPart,虚部 }; struct Node{ struct Number data; //数据域 struct Node* next; //指针域 }; //创建链表 struct Node* createList() { struct Node* headNode = (struct Node*)malloc(sizeof(struct Node)); //动态申请内存 headNode -> next = NULL; return headNode; } //创建节点 struct Node* createNode(struct Number data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); //动态申请内存 newNode -> data = data; newNode -> next = NULL; return newNode; } //插入节点 void insertNodeByHead(struct Node* headNode, struct Number data) //头插法:每次插入节点都是插入在headNode和headNode->next之间 { struct Node* newNode = createNode(data); //调用创建节点函数 newNode -> next = headNode -> next ; //新节点指向的下一个是原头节点的下一个 headNode -> next = newNode; //头节点指向的下一个节点是新节点 } //复数求和(我的思路是:直接将第二个节点后面所有节点的数据都加在第二个节点的数据里,最后只打印第二个节点的数据) void calculataList(struct Node* headNode, struct Number data) { struct Node* pMove = headNode -> next -> next; //pMove用于遍历第二个节点后面的所哟节点 while(pMove != NULL) { struct Node* taotal = headNode -> next; //total指向headNode -> next, 即第二个节点 taotal -> data.real += pMove -> data.real; //第二个节点后面的所有的节点的实部数据都加在total -> data.real里 taotal -> data.imagin += pMove -> data.imagin; //第二个节点后面的所有的节点的虚部数据都加在total -> data.imagin里 pMove = pMove -> next; //每一个节点的实部和虚部数据加完后,pMove不断后移,直到pMove == NULL循环停止 } } //链表打印 void printList(struct Node* headNode, struct Number data) { struct Node* taotal = headNode -> next; printf("%d+%di\n", taotal -> data.real, taotal -> data.imagin); //这里只打印链表中的第二个节点里面的数据,因为所有节点的数据都加在这个节点上了 } int main() { struct Number num; //临时存放读入的数据 struct Node* list = createList(); //调用创建链表函数 int n = 0; scanf("%d", &n); for(int i = 0; i < n; i ++) //读取数据 { scanf("%d %d", &num.real, &num.imagin); insertNodeByHead(list, num); //调用插入节点函数,每读入一个复数,就要将这个复数存储在节点中,并插入链表 } calculataList(list, num); //调用复数求和函数 printList(list, num); //调用链表打印函数,并检验 return 0; }
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:366 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:569 |
1012题解浏览:938 |
前10名 (C语言代码)浏览:773 |
生日日数 (C语言代码)浏览:1574 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:1302 |
1025题 初学者,求帮忙看下,不知道哪错了浏览:325 |
Manchester-字符串的输入输出处理浏览:12893 |
Hello, world! (C语言代码)浏览:803 |
回文数字 (Java代码)浏览:698 |