java利用链表实现多项式相加,用链表实现多项式相加并输出显示

当前位置:我的异常网» C语言 » 用链表实现多项式相加并输出显示

用链表实现多项式相加并输出显示

www.myexceptions.net  网友分享于:2013-02-24  浏览:197次

【求助】用链表实现多项式相加并输出显示

< > 关于用链表实现多项式相加:

题目要求:用户可以不按升幂或降幂输入数据建立多项式链表,但必须按照指数降序排列输出多项式;   程序功能要求能够完成两个多项式的相加、相减,并将结果输出显示。

作答要求:多项式相加的基本过程的算法(可以使用程序流程图)   、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;

以下是本人写的按升幂输入,升幂输出多项式的程序,但是编译通过,却运行不到结果,请大家帮忙指点修正:

[code]

#include

#include

#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

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);

}

文章评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值