数据结构作业之多项式求和
#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;
}