#include<stdio.h>
#include<malloc.h>
#define ElemType int
typedef struct ployNode{
int coef,index;
struct ployNode *next;
};
ployNode *insert_ployNode(ployNode *L,ployNode *newp){
//按指数降序的方法插入
ployNode *p,*q;
if(L->next==NULL){
newp->next=NULL;
L->next=newp;
}else{
for(q=L,p=L->next;p;p=p->next){//主要实现节点的比较
if(newp->index>p->index){
q->next=newp;
newp->next=p;
break;
}
else if(newp->index==p->index){
p->coef+=newp->coef;//合并同类项
free(newp);//释放新节点
break;
}
else{
q=p;//如果新节点<已有节点,则继续前移查找
}
}
if(p==NULL){//如果查找完毕仍未找到要插入的地方,则插入尾部
newp->next=NULL;
q->next=newp;
}
}
return L;
}
ployNode *create_ployNode(ployNode *L){
//用insert_ployNode将无序的多项式降序插入到L中,
//实现有序链表的创建
ployNode *tail,*newp;
int coef,index,count;
//创建头结点
L=(ployNode *)malloc(sizeof(ployNode));
L->next=NULL;
printf("请输入多项式的项数
");
scanf("%d",&count);
for(int i=0;i<count;i++){
printf("
第%d项的系数coef=",i+1);
scanf("%d",&coef);
printf("第%d项指数的index=",i+1);
scanf("%d",&index);
newp=(ployNode *)malloc(sizeof(ployNode));//创建节点
newp->coef=coef;
newp->index=index;
L=insert_ployNode(L,newp);
}
return L;
}
ployNode *merge_similarNode(ployNode *La,ployNode *Lb){
//不破坏Lb的情况下合并多项式La,Lb。
ployNode *p,*newp;
for(p=Lb->next;p;p=p->next){
newp=(ployNode *)malloc(sizeof(ployNode));
newp->coef=p->coef;
newp->index=p->index;
La=insert_ployNode(La,newp);//利用insert_ployNode函数实现
//多项式加法
}
return La;
}
void print(ployNode *L){
ployNode *p;
for(p=L->next;p;p=p->next){
printf("conf=%d,index=%d
",p->coef,p->index);
}
}
int main(){
ployNode *La,*Lb;
La=create_ployNode(La);
print(La);
printf("
");
Lb=create_ployNode(Lb);
print(Lb);
printf("
");
La=merge_similarNode(La,Lb);
print(La);
return 0;
}