标题: 贴上我写的多项式相加的代码 [打印本页]
作者: liuyang 时间: 2012-1-14 03:52
标题: 贴上我写的多项式相加的代码
呵呵,自己写的与调试。花了1个半小时呢!!
#include<stdio.h>
#include<malloc.h>
/***y=5x^9+3x^4+6x+-1****/
/***y=12x^12+-3x^4+2x+3*****/
/** 求Y的直 ***/
typedef struct list1 {
int wdata; //系数
int exp; //指数
struct list1* next;
}cl;
void creat_l(cl <)
{
cl *p,*q;
int a,b,n;
p=<
// scanf("%d%d",&a,&b);
for(n=4;n>0;--n)
{
q=(cl *)malloc(sizeof(cl));
scanf("%d%d",&a,&b);
q->wdata =a;
q->exp=b;
p->next=q;
p=q;
}
p->next=NULL;
}
void padd(cl <1,cl <2) //相加
{
cl *p,*q,*fp,*dp,*fq;
int sum;
fp =<1;
fq=<2;
p=lt1.next;
q=lt2.next;
while(p&&q)
{
if (p->exp==q->exp)
{
sum =p->wdata+q->wdata;
if(sum){
p->wdata=sum;
fp=p;
}else
{
fp->next=p->next;
free(p);
}
p=fp->next;
dp=q;
q=q->next;
free(dp);
}else
{
if (p->exp>q->exp)
{
// fp->next=p;
fp=p;
p=p->next;
}else
{
fp->next=q; //
fp=q; //当前指针为q
q=q->next; //q下移一个
fp->next=p; //当前指针下个节点是p
}
}
}
if(q)fp->next=q;
// free(fq); //释放表头
}
void print_l(cl <) //打印
{
cl *p;
p=lt.next;
while(p->next)
{
printf("%dX^%d+",p->wdata,p->exp);
p=p->next;
}
printf("%dX",p->wdata);
}
int main()
{
cl c1,c2;
creat_l(c1);
creat_l(c2);
padd(c1,c2);
print_l(c1);
return 0;
}
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |