百度知道多项式加法【已解决】

还是要提醒自己,涉及指针的算法,的确麻烦,一旦 指针没弄好,全盘完蛋..

 

运行结果还行,总算 有基础的结果啦.

 

 

#include <iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
typedef struct DXS{
float xs;
int zs;
struct DXS *next;
} multinomial;
//输入函数

void print(multinomial *h1) ;
multinomial *input(void)
{
multinomial *p,*h;
p=NULL;
h=NULL;
bool flag = true;
printf("please input the xs and zs of the DXS:/n");
for(;;)
{
if (flag)
{
p=(multinomial *)malloc(sizeof(multinomial));
}
else
{
multinomial *temp = (multinomial *)malloc(sizeof(multinomial));
p->next = temp;
p = p->next;
p->next=NULL;
}
scanf("%f %d",&p->xs,&p->zs);
if(p->xs==0 && p->zs==0){break;}
if (flag)
{
h=p;
flag=false;
}
}
return(h);
}
//将多项式排序

multinomial *inorder(multinomial *h)
{
multinomial *s,*t,*m,*h3;
h3=h->next;
if (h3==NULL)
{
return h;
}
h->next=NULL;
while(h3!=NULL)
{
s=h3;
h3=h3->next;
t=h;
m=h;
while(t!=NULL&&s->zs < t->zs)
{
m=t;
t=t->next;
}
if(m==t)
{s->next=t;
h=s;
}
else
{
s->next=t;
m->next=s;
}
}
return(h);

}
//两个多项式相加
multinomial *add(multinomial *h1,multinomial *h2)
{
multinomial *u,*v,*w,*j;
w=h2;j=h2;
while(j!=NULL)
{
u=v=h1;w=j;
while(u!=NULL&&u->zs>w->zs)
{v=u;
u=u->next;
}
if(u->zs==w->zs) //指数相同,则系数相加
{
u->xs=u->xs+w->xs;
if(u->xs==0) //如果系数为0,则做删除操作
{
if(u==v) //删除表头
h1=h1->next;
else if(u->next==NULL) // 删除表尾
v=NULL;
else //删除表中
{
u=u->next;
}
}
}

else if(u=v) //待插入点在在表头
{
w->next=u;
h1->next=w;
}
else //待插入点不是在表头
{
w->next=u;
v->next=w;
}

j=j->next;
}
return(h1);
}
void print(multinomial *h1)
{
printf("f(x)=");
while(h1!=NULL)
{

if(h1->zs!=0) {
printf("%f",h1->xs);
printf("x^%d",h1->zs);
}
h1=h1->next;
if(h1!=NULL&&h1->xs!=0)
printf("+");
}
}

void main()
{multinomial *h1,*h2;
printf("输入第一个多项式的系数和指数(系数与指数之间用空格号隔开)");
h1=input();
printf("输入第二个多项式的系数和指数(系数与指数之间用空格号隔开");
h2=input();
h1=inorder(h1);
h2=inorder(h2);
h1=add(h1,h2);
print(h1);
int a;
cin>>a;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值