/* 邵发, 1309班, */
/*
作业07, 练习1
用节点node表示多项式的系数和次数,编程合并两个链式表达的多项式。
*/
#include
#include
/* 二项式的项, 用单链表来表示一个二项式 */
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;
}