单链表实现多项式的合并(指数降序输出)

#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;
}

原文地址:https://www.cnblogs.com/jiafeng1996/p/11291984.html