用链表实现多项式相加并输出显示
【求助】用链表实现多项式相加并输出显示
< <一道数据结构题目> > 关于用链表实现多项式相加:
题目要求:用户可以不按升幂或降幂输入数据建立多项式链表,但必须按照指数降序排列输出多项式; 程序功能要求能够完成两个多项式的相加、相减,并将结果输出显示。
作答要求:多项式相加的基本过程的算法(可以使用程序流程图) 、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
以下是本人写的按升幂输入,升幂输出多项式的程序,但是编译通过,却运行不到结果,请大家帮忙指点修正:
[code]
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct Polynomial)
struct Polynomial
{ float coef;
long expn;
struct Polynomial *next;
};
int n=0,sum=0;
int cmp(long a,long b)
{
int flag;
if(a <b) flag=-1;
else if(a> b)
flag=1;
else flag=0;
return flag;
}
struct Polynomial *creat (void)
{
struct Polynomial *head;
struct Polynomial *p1,*p2;
p1=p2=(struct Polynomial *)malloc(LEN);
scanf( "%f,%ld ",&p1-> coef,&p1-> expn);
head=NULL;
while(p1-> coef!=0)
{
n++;
if(n==1) head=p1;
else p2-> next=p1;
p2=p1;
p1=(struct Polynomial *)malloc(LEN);
scanf( "%f,%ld ",&p1-> coef,&p1-> expn);
}
p2-> next=NULL;
return head;
}
struct Polynomial *add(struct Polynomial *ah,struct Polynomial *bh)
{
struct Polynomial *pa1,*pa2,*pb1,*pb2;
float sumcoef;
pa1=ah;
pb1=bh;
pa2=pa1-> next;
pb2=pb1-> next;
while(pa1&&pb1)
{
switch(cmp(pa2-> expn,pb2-> expn))
{
case -1:pb2-> next=pa2;
pa2-> next=pb2-> next;
pb2=pb2-> next;
pa2=pa1-> next;break;
case 0 :sumcoef=pa1-> coef+pb1-> coef;
if(sumcoef!=0.0){
pa1-> coef=sumcoef;}break;
case 1:pb1-> next=pa2;
pa2-> next=pb2;
pa2=pa1-> next-> next;
pb2=pb2-> next;
break;
}
}
if(pb2)
pb1-> next=pb2;
free(bh);
return ah;
}
void display(struct Polynomial *head)
{
struct Polynomial *p;
printf( "The combinated Polynomial is:\n ");
p=head;
if(p!=NULL)
do
{printf( "%f,x^%ld ",p-> coef,p-> expn);
p=p-> next;
}
while (p!=NULL);
}
void main()
{
struct Polynomial *pahead,*pbhead,*abhead;
printf( "Input list Pa:\n ");
pahead=creat();
sum=sum+n;
printf( "Input list Pb:\n ");
pbhead=creat();
sum=sum+n;
abhead=add(pahead,pbhead);
display(abhead);
}
< <一道数据结构题目> > 关于用链表实现多项式相加:
题目要求:用户可以不按升幂或降幂输入数据建立多项式链表,但必须按照指数降序排列输出多项式; 程序功能要求能够完成两个多项式的相加、相减,并将结果输出显示。
作答要求:多项式相加的基本过程的算法(可以使用程序流程图) 、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
以下是本人写的按升幂输入,升幂输出多项式的程序,但是编译通过,却运行不到结果,请大家帮忙指点修正:
[code]
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct Polynomial)
struct Polynomial
{ float coef;
long expn;
struct Polynomial *next;
};
int n=0,sum=0;
int cmp(long a,long b)
{
int flag;
if(a <b) flag=-1;
else if(a> b)
flag=1;
else flag=0;
return flag;
}
struct Polynomial *creat (void)
{
struct Polynomial *head;
struct Polynomial *p1,*p2;
p1=p2=(struct Polynomial *)malloc(LEN);
scanf( "%f,%ld ",&p1-> coef,&p1-> expn);
head=NULL;
while(p1-> coef!=0)
{
n++;
if(n==1) head=p1;
else p2-> next=p1;
p2=p1;
p1=(struct Polynomial *)malloc(LEN);
scanf( "%f,%ld ",&p1-> coef,&p1-> expn);
}
p2-> next=NULL;
return head;
}
struct Polynomial *add(struct Polynomial *ah,struct Polynomial *bh)
{
struct Polynomial *pa1,*pa2,*pb1,*pb2;
float sumcoef;
pa1=ah;
pb1=bh;
pa2=pa1-> next;
pb2=pb1-> next;
while(pa1&&pb1)
{
switch(cmp(pa2-> expn,pb2-> expn))
{
case -1:pb2-> next=pa2;
pa2-> next=pb2-> next;
pb2=pb2-> next;
pa2=pa1-> next;break;
case 0 :sumcoef=pa1-> coef+pb1-> coef;
if(sumcoef!=0.0){
pa1-> coef=sumcoef;}break;
case 1:pb1-> next=pa2;
pa2-> next=pb2;
pa2=pa1-> next-> next;
pb2=pb2-> next;
break;
}
}
if(pb2)
pb1-> next=pb2;
free(bh);
return ah;
}
void display(struct Polynomial *head)
{
struct Polynomial *p;
printf( "The combinated Polynomial is:\n ");
p=head;
if(p!=NULL)
do
{printf( "%f,x^%ld ",p-> coef,p-> expn);
p=p-> next;
}
while (p!=NULL);
}
void main()
{
struct Polynomial *pahead,*pbhead,*abhead;
printf( "Input list Pa:\n ");
pahead=creat();
sum=sum+n;
printf( "Input list Pb:\n ");
pbhead=creat();
sum=sum+n;
abhead=add(pahead,pbhead);
display(abhead);
}