数据结构作业
//本来要交作业,写完了,不收了????
//#include<bits/stdc++.h>
#include <stdio.h>
#include <math.h>
typedef struct LNode{
double coef;//系数
int expn;//指数
struct LNode *next;
}LNode,*LinkList;
void CreatPolyn(LinkList &P,int n){
//输入n项的系数和指数,建立表示一元多项式的有序链表
LinkList s,pre,q;
P=new LNode;
P->next=NULL;
while(n--){
s=new LNode;
scanf("%lf %d",&s->coef , &s->expn);
pre=P;
q=P->next;
while(q&&q->expn<s->expn){
pre=q;
q=q->next;
}
s->next=q;
pre->next=s;
}
}
void AddPolyn(LinkList &Pa,LinkList &Pb){
//求pa=pa+pb
LinkList p1=Pa->next;
LinkList p2=Pb->next;
LinkList p3=Pa;
while(p1&&p2){
if(p1->expn<p2->expn){
p3->next=p1;p3=p1;p1=p1->next;
}else if(p1->expn>p2->expn){
p3->next=p2;p3=p2;p2=p2->next;
}else{
double sum=p1->coef+p2->coef;
if(fabs(sum)<1e-6){
LinkList r=p1;p1=p1->next;delete r;
r=p2;p2=p2->next;delete r;
} else {
p1->coef=sum;
p3->next=p1;p3=p1;p1=p1->next;
LinkList r=p2;p2=p2->next;delete r;
}
}
}
p3->next=p1?p1:p2;
delete Pb;
}
void PrintPolyn(LinkList P){
//输出多项式
LinkList p=P->next;
while(p)
{
if(p->coef>0){
printf("+");
}
printf("%.1lf x^%d\t",p->coef,p->expn);
p=p->next;
}
printf("\n");
}
int main(){
LinkList LA,LB;
int na,nb;
printf("建立LA,请输入元素个数:");
scanf("%d",&na);
CreatPolyn(LA,na);
printf("LA中的元素为:\n");
PrintPolyn(LA);
printf("建立LB,请输入元素个数:");
scanf("%d",&nb);
CreatPolyn(LB,nb);
printf("LB中的元素为:\n");
PrintPolyn(LB);
AddPolyn(LA,LB);
printf("合并后的等式为");
PrintPolyn(LA);
}