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

清枫草塘 清枫草塘 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
<<一道数据结构题目>>关于用链表实现多项式相加:
题目要求:用户可以不按升幂或降幂输入数据建立多项式链表,但必须按照指数降序排列输出多项式; 程序功能要求能够完成两个多项式的相加、相减,并将结果输出显示。
作答要求:多项式相加的基本过程的算法(可以使用程序流程图) 、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;


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




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




(1)其中有一段多项式相加函数没有按题目要求“可以不按升幂或降幂顺序排列输入”写,能力所限,只写了个一般性的程序,而且也得不到结果。请大家帮帮指出上面的错误。(C环境下无法输入,C++下可以输入却输不出结果)

(2)上述程序如果按照题目要求写程序,是不是需要添加有关排序函数?怎么写?请高手指教修正

请赐教二点疑惑,谢谢!!
...全文

相关推荐

C++ 链表实现两个一元多项式相加

c++,算法链表实现一元多项式相加,通过链表实现,非常好的一个程序

studykl

数据结构(C语言)用单链表存储一元多项式并实现两个多项式的相加运算.doc

数据结构(C语言)用单链表存储一元多项式并实现两个多项式的相加运算.doc

超级源码阿

一元多项式相加用链表实现

题目说明: 编写一元多项式加法运算程序。要求用线性链表存储一元多项式(参照课本)。该程序有以下几个功能: 1. 多项式求和 输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc (提示:调用CreatePolyn(polynomial &P,int m)。 输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc (提示:调用AddPolyn(polynomial &Pa, polynomial Pb), 调用PrintPolyn(polynomial P))。 0. 退出 输入: 根据所选功能的不同,输入格式要求如下所示(第一个数据是功能选择编号,参见测试用例): 1 多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数) 多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数) 多项式C包含的项数,以指数递增的顺序输入多项式C各项的系数(整数)、指数(整数) 0 ---操作终止,退出。 输出: 对应一组输入,输出一次操作的结果(参见测试用例)。 1 多项式输出格式:以指数递增的顺序输出: ,,,参见测试用例。零多项式的输出格式为 0 无输出

zzzbit

c语言链表实现多项式相加

在visual c++6.0环境中 链表 动态链表 多项式相加

勇敢者

C语言单链表实现多项式相加

主要为大家详细介绍了C语言单链表实现多项式相加,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

weixin_38518958
评论 11
收藏 已收藏
分享
返回顶部
清枫草塘
C语言 70,039 成员 243,237 内容