使用链表来实现单元多项式的加法、减法、乘法。一个单元多项式的节点结构无非是这样的:系数域、指数域、链域。
如下图:
我们使用链表来模拟单元多项式的常见运算。其中,加法是其它运算的基础,减法:poly1-poly2=poly1+(-poly2),乘法:poly1*poly2,可用poly1乘以poly2的每一项,相加其乘积结果。
单元多项式的节点结构类型是这样的:
typedef struct node
{
float coef; //系数
int expn; //指数
struct node *next;
}PolyNode; //多项式节点 polynomial node
多项式的加法我们提供了两种:
1.Polynomial polyAdd(Polynomial poly1, Polynomial poly2),把poly1和poly2相加得到一个新的多项式,相加的过程中poly1和poly2保持不变,不会被破坏。
2.void add(Polynomial poly1, Polynomial poly2),把poly2加到poly1上,相加的过程中poly2的节点会被利用上。结束后,poly2不存在了。
提供第一种加法,是为了保持poly1和poly2不变,以便进行下一次的运算。提供第二种加法,是为了运算结束后,内存不会泄露。
其它具体细节得看代码了:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
float coef; //系数
int expn; //指数
struct node *next;
}PolyNode; //多项式节点 polynomial node
typedef PolyNode* Polynomial;
Polynomial createPolynomial() //创建多项式
{
PolyNode *p, *q, *head = (PolyNode *)malloc(sizeof(PolyNode)); //头节点
head->next = NULL;
float coef;
int expn;
printf("输入该多项式每一项的系数和指数,每项一行,输入0 0结束ÿ