我已经被这个问题折磨的不行了,我不会改
#include<iostream.h>
#include<stdlib.h>
#define MAX 20
//存放多项式的数组类型
typedef struct{
float coef;
int expon;
}polyarray [MAX];
//定义单链表结点类型
typedef struct poly_node{
float coef; //系数
int expon; //指针域
struct poly_node *next;
}poly_node,*poly_pointer; //指向结构的指针
//创建,初始化,显示,
//尾插法创建链表
void creatpoly(poly_pointer &L,polyarray a[],int n){
poly_pointer r,s;
L=(poly_pointer)malloc(sizeof(poly_node));
L->next=NULL;
r=L; //p时钟指向尾结点,开始时指向头结点
for(int i=0;i<n;i++){
s=(poly_pointer)malloc(sizeof(poly_node));//创建新结点
s->coef=a[i].coef;
s->expon=a[i].expon;
r->next=s;//将结点s插入到结点r之后
r=s;
}
r->next =NULL; //尾结点next域为空
}
void display(poly_pointer L){
poly_pointer p=L->next;
while(p!=NULL){
cout<<p->coef<<"*"<<p->expon;
p=p->next;
}
cout<<endl;
}
//按exp域递减排序
void sort(poly_pointer &head){
poly_pointer p=head->next,q,r;
if(p!=NULL){ //若原链表中有一个以上的数据结点
r=p->next;
p->next=NULL;
p=r;
while(p!=NULL){
r=p->next;
q=head;
while(q->next!=NULL&&q->next->expon>p->expon)
q=q->next;
p->next=q->next;
q->next=p;
p=r;
}
}
}
void AddPolyn(poly_pointer &pa,poly_pointer pb){
//求一元多项式pa 和pb 的和,保存在pa里
poly_pointer qa=pa->next,qb=pb->next;
poly_pointer p=pa;
while(qa && qb){
if(qa->expon<qb->expon){
//qa连入结果
pa=(poly_pointer)malloc(sizeof(poly_node));
pa->next=pa->next;
pa->expon=pa->expon;
p->next=pa;
p=pa;
pa=pa->next;
}else if(qa->expon==qb->expon){
pa->expon+=qb->expon;
if(qa->coef){//qa连入结果
pa=(poly_pointer)malloc(sizeof(poly_node));
pa->expon=pa->expon;
pa->coef=pa->coef;
p->next=pa;
p=pa;
}
qa=qa->next; qb=qb->next;
}
else{ //qa->expon>qb->expon
//qb连入结果
pa=(poly_pointer)malloc(sizeof(poly_node));
pa->expon=pb->expon;
pa->coef=pb->coef;
p->next=pa;
p=pa;
pb=pb->next;
}
}//while
//谁未结束,谁连进
if(pb!=NULL) pa=pb;
while(pa!=NULL){
pa=(poly_pointer)malloc(sizeof(poly_node));
pa->expon=pa->expon;
pa->coef=pa->coef;
p->next=pa;
p=pa;
pa=pa->next;
}
p->next=NULL;
}
void mian(){
poly_pointer LA,LB;
polyarray a[]={{3,1},{2,2},{1,3},{4,4}};
polyarray b[]={{3,1},{2,2},{1,3},{4,4},{3,5}};
creatpoly(LA,a,4);
creatpoly(LB,b,5);
cout<<"原A:";
display(LA);
cout<<endl;
cout<<"原B:";
display(LB);
cout<<endl;
sort(LA);
sort(LB);
cout<<"有序:";
display(LA);
cout<<"有序:";
display(LB);
AddPolyn(LA,LB);
cout<<"结果:";
display(LA);
cout<<endl;
}