假设Q_m(x)是一元m次多项式,同样可以用线性表Q来表示:
<center>Q=(q_0,q_1,...,q_m)</center>
不失一般性,设P_n(x)=(p_0,p_1,...,p_n),且n>m,则易知
P_n(x)+Q_m(x)=(p_0+q_0, p_1+q_1,...,p_m+q_m,p_{m+1},...,p_n)
故知,可以通过线性表来表示,而出于对节省空间的考量,故使用链式线性表。
#include <stdio.h>
#include <stdlib.h>
typedef struct polynomial{
float coef; // coefficient
int expn; // exponent
}polynomial;
typedef struct LNode{
polynomial data;
struct LNode * next;
}LNode;
void insertlast(LNode *p, LNode *add){
while(p->next != NULL){
p = p->next;
}
p->next = add;
}
void createPolynomial(LNode *p, int m){
// set the head node
// p = malloc(sizeof(LNode)); 请注意,我们已经在main()函数中对她进行了一个申请空间的操作
p->data.coef = 1; p->data.expn = 0; p->next=NULL;
// build new
int i;
for (i=1; i<=m; ++i){
LNode *temp = malloc(sizeof(LNode));
temp->data.coef = rand() / 2.0; temp->data.expn = i;
temp->next = NULL;
insertlast(p, temp);
}
}
void print_polynomial(LNode p){
printf("the polynomail is: ");
LNode *start = p.next;
while(1){
printf("%.2fx^%d ", start->data.coef, start->data.expn);
if (start->next){
start = start->next;
}else{
break;
}
}
printf("\n");
}
int main(){
LNode po;
createPolynomial(&po, 5);
print_polynomial(po);
return 0;
}
网友评论