数据结构作业之多项式求和

数据结构作业之多项式求和

#include <stdio.h>
#include <stdlib.h>
typedef struct 
{
 int exp;
 float real;
}NUM;

typedef struct Lnode
{
 NUM data;
 struct Lnode *next;
}Lnode,*Linklist;

int initlinklist(Linklist &L)
{
 L=(Linklist)malloc(sizeof(Lnode));
 if(L==NULL)
  return 0;
 L->next=NULL;
 return 1;
}

//插入结点 
int insertlinklist(Linklist &L,NUM x)
{
 Linklist P=L,S;
 int pos=0;
 while(P->next!=NULL)
 {
  P=P->next;
   }
 S=(Linklist)malloc(sizeof(Lnode));
 S->data=x;
 S->next=NULL;
 P->next=S;
 return 1;
}

//创建新链表 
void createlinklist(Linklist &L)
{
 NUM pos;char yn;
 Linklist P=L,S;
 do
 {
  printf("input : ");
  scanf("%d%f",&pos.exp,&pos.real);
  getchar();
  S=(Linklist)malloc(sizeof(Lnode));
  S->next=NULL;
  S->data=pos;
  P->next=S;
  P=S;
  printf("C: ");
  yn=getchar();
 }while(yn=='y');
}

//输出链表节点值 
void displinklist(Linklist L)
{
 Linklist P=L->next;
 while(P)
 {
  printf("exp:%d real:%.1f",P->data.exp,P->data.real);
  P=P->next;
 }
}

//两个多项式求和 
int comblinklist(Linklist &L,Linklist &S,Linklist &P)
{
 Linklist M=L->next;NUM x;
 Linklist N=S->next;
 Linklist Q;
 while(M&&N)
 {
  if(M->data.exp==N->data.exp)
   {
    x.exp=M->data.exp;
    x.real=M->data.real+N->data.real;
    if(x.real!=0)
     {
      insertlinklist(P,x); 
      } 
    M=M->next;
    N=N->next;
   }
 else if(M->data.exp>N->data.exp)
  {
   x.exp=N->data.exp;
   x.real=N->data.real;
   insertlinklist(P,x);
   N=N->next;
  }
 else if(M->data.exp<N->data.exp)
  {
   x.exp=M->data.exp;
   x.real=M->data.real;
   insertlinklist(P,x);
   M=M->next;
  }
 }
 while(M)
 {
  x.exp=M->data.exp;
  x.real=M->data.real;
  insertlinklist(P,x);
  M=M->next;
 }
 while(N)
 {
  x.exp=N->data.exp;
  x.real=N->data.real;
  insertlinklist(P,x);
  N=N->next;
 }
 return 1;
}


int main()
{
 Linklist L,S,P;
 initlinklist(L);
 initlinklist(S);
 createlinklist(L);
 createlinklist(S); 
 initlinklist(P);
 comblinklist(L,S,P);
 displinklist(P);
 return 0;
}





  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值