/* 邵发, 1309班, */ /* 作业07, 练习1 用节点node表示多项式的系数和次数,编程合并两个链式表达的多项式。 */ #include <stdio.h> #include <stdlib.h> /* 二项式的项, 用单链表来表示一个二项式 */ typedef struct __Node { double coe; // 系统数 int exp; // 指数 struct __Node* next; }Node; /* 寻找指定指数的项 */ Node* FindNode(Node* b, int exp) { while(b != NULL) { if(b->exp == exp) { return b; } b = b->next; } return NULL; } // 用于构造二项式,直接放在前面 Node* AddNode(Node* b, double coe, int exp) { Node* node_new = (Node*) malloc(sizeof(Node)); node_new->coe = coe; node_new->exp = exp; node_new->next = b; return node_new; } /* 二项式合并, 返回合并后的二项式 */ Node* Merge(Node* bin1, Node* bin2) { while(bin2 != NULL) { Node* nd = FindNode(bin1, bin2->exp); if(nd) { // 已经存在该项,则直接合并系数 nd->coe += bin2->coe; } else { // 在bin1中添加该指数项 bin1 = AddNode(bin1, bin2->coe, bin2->exp); } bin2 = bin2->next; } return bin1; } /* 打印二项式 */ void PrintNodes(Node* b) { while(b) { printf("%.0fX^%d ", b->coe, b->exp); if(b->next) printf(" + "); b = b->next; } } int ex07_01() { // 二项式1 Node* b1 = NULL; Node* b2 = NULL; b1 = AddNode(b1, 1, 1); b1 = AddNode(b1, 2, 2); b1 = AddNode(b1, 3, 3); b2 = AddNode(b2, 2, 2); b2 = AddNode(b2, 3, 3); b2 = AddNode(b2, 4, 4); printf("式1:"); PrintNodes(b1); printf("\n"); printf("式2:"); PrintNodes(b2); printf("\n"); Node* b3 = Merge(b1, b2); printf("合并后:"); PrintNodes(b3); printf("\n"); return 0; }