##利用线性表计算多项式的值
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define Maxsize 20
typedef struct{
int*data;
int dlen;
int len;
}LinkList;
//初始化线性表
void InitList(LinkList *L){
L->data=(int*)malloc(Maxsize*sizeof(int));//最多只能计算十个系数长度的多项式
L->dlen=0;
L->len=Maxsize;
}
//输入多项式的系数
void Insetdata(LinkList *L){
int i,j,x;
printf("请输入需要输入的个数再输入数据\n");
scanf("%d",&x);
for(i=0;i<x;i++){
scanf("%d",&j);
L->data[i]=j;
L->dlen++;
}
}
//输出多项式的系数
void printfList(LinkList *L){
int i;
for(i=0;i<L->dlen;i++){
printf("[%d]\t",L->data[i]);
}
printf("\n");
}
/*两个多项式系数相加*/
LinkList * SumList(LinkList *L,LinkList *H){
LinkList*p;
int i,j,k;
i=L->dlen;
j=H->dlen;
k=0;
if(L->dlen<=H->dlen){
p=H;}
else if(L->dlen>H->dlen) {
p=L;
}
while(i&&j){
p->data[k]=L->data[k]+H->data[k];
i--;
j--;
k++;
}
while(i){
p->data[k]=L->data[k];
i--;
k++;
}
while(j){
p->data[k]=H->data[k];
j--;
k++;
}
p->dlen=k;
return p;
}
/*多项式运算*/
void AddingPolynomials(LinkList *L){
int sum,i,x;
sum=0;
printf("请输入底数的值\n");
scanf("%d",&x);
for(i=0;i<L->dlen;i++){
sum=sum+L->data[i]*pow(x,i);//有指数为0的
}
printf("多项式结果为:%d",sum);
}
/*销毁线性表*/
void DestryList( LinkList*L){
free(L->data);
};
int main(int argc, char *argv[]) {
int x;
LinkList *p;
LinkList A,B;//创建两个线性表分别存储两个多项式的系数
InitList(&A);
InitList(&B);
Insetdata(&A);
Insetdata(&B);
printf("数据表A的系数:\n");
printfList(&A);
printf("数据表B的系数:\n");
printfList(&B);
p=SumList(&A,&B);//合并多项式的系数
printf("合并后多项式的系数:\n");
printfList(p);
AddingPolynomials(p);
DestryList(&A);
DestryList(&B);
return 0;
}
##运行结果