c语言链表项求和,c语言多项式求和 链表

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

从CSDN找的一段代码 但是运行出来有问题

比如说:

(1x^2+1)*(1x^2-1)

运行结果是7821839x^2+1x^2-1

product函数中用了一个 polynomial initpolt(polynomial p1,polynomial p2) 用p1第一项乘以p2初始化结果多项式

个人认为可能是这一步不太对 但不知道怎么解决

希望大家帮忙看一看 谢谢

下面放的是我全部的代码:

#include

#include

struct PolyNode;

typedef struct PolyNode *PtrNode;

typedef PtrNode polynomial;

struct PolyNode

{

int nCoef;

int nExpon;

PtrNode Next;

};

/*some function are also given*/

polynomial MakeEmpty(polynomial p);

void InsertNode(int Coef,int expon,polynomial poly);

void PrintPoly(polynomial p);

void readPoly(polynomial poly);

void InsertNode(int Coef,int expon,polynomial poly)

{

PtrNode p=poly->Next;

PtrNode pPre=poly;

while(p)

{

if (p->nExpon == expon)

{

p->nCoef += Coef;

break;

}

else if(p->nExpon > expon)

{

p=p->Next;

pPre = pPre -> Next;

}

else

{

PtrNode temp;

temp = (PtrNode)malloc(sizeof(struct PolyNode));

temp->nCoef = Coef;

temp->nExpon = expon;

pPre -> Next =temp;

temp->Next = p;

break;

}

}

if(p==NULL)

{

PtrNode temp;

temp = (PtrNode)malloc(sizeof(struct PolyNode));

temp->nCoef = Coef;

temp->nExpon = expon;

pPre->Next = temp;

temp->Next = NULL;

}

}

polynomial MakeEmpty(polynomial p)

{

p = (polynomial)malloc(sizeof(struct PolyNode));

if(p==NULL)

printf("Out of memory!");

p->Next = NULL;

return p;

}

void PrintPoly(polynomial p)  //多项式链表打印函数

{

while(p->Next)

{

printf("%d",p->Next->nCoef);

if (p->Next->nExpon != 0)

{

printf("x^%d",p->Next->nExpon);

}

p=p->Next;

if(p->Next!=NULL)

{

if(p->Next->nCoef>0)

{

printf("+");

}

}

}

printf("\n");

}

void readPoly(polynomial poly)

{

printf("Reading poly:\n");

int n,coef,expon;

int i;

scanf_s("%d",&n);

for(i=0;i

{

scanf_s("%d",&coef);

scanf_s("%d",&expon);

InsertNode(coef,expon,poly);

}

}

void Attach(int c,int e,PtrNode p) //在p后面添加节点

{

polynomial temp = (polynomial)malloc(sizeof(struct PolyNode));

temp->nCoef=c;

temp->nExpon=e;

temp->Next=NULL;

p->Next=temp;

p=temp;

}

polynomial initPoly(polynomial p1,polynomial p2)  //用p1第一项乘以p2初始化结果多项式

{

polynomial p,t,rear;

p=(polynomial)malloc(sizeof(struct PolyNode));

p->Next=NULL;

t=(polynomial)malloc(sizeof(struct PolyNode));

t=p2;

rear=p;

while(t)

{

Attach((p1->nCoef)*(t->nCoef),p1->nExpon+t->nExpon,rear);

t=t->Next;

}

return p;    //此时返回的多项式含头结点

}

polynomial product(polynomial p1,polynomial p2)

{

polynomial p3=initPoly(p1,p2);//新多项式

polynomial t1,t2,rear,temp;

int c,e;

t1=p1->Next;

while(t1)

{

rear=p3;

t2=p2;

while(t2)

{

c=(t1->nCoef)*(t2->nCoef);

e=(t1->nExpon)+(t2->nExpon);

while((rear->Next)&&(rear->Next->nExpon>e)) //移动rear,找到插入的位置

{

rear = rear->Next;

}

if((rear->Next)&&(rear->Next->nExpon == e))  //合并同类项

{

if(rear->Next->nCoef+c)

{

rear->Next->nCoef+=c;

}

else       //同类项系数为0,删去该节点

{

temp=rear->Next;

rear->Next=temp->Next;

free(temp);

}

}

else     //不能合并同类项部分即插入节点

{

temp=(polynomial)malloc(sizeof(struct PolyNode));

temp->nCoef=c;

temp->nExpon=e;

temp->Next=rear->Next;

rear->Next=temp;

}

t2=t2->Next;

}

t1=t1->Next;

}

temp=p3;

p3=p3->Next;

free(temp);

return p3;

}

int main()

{

polynomial p1,p2,result;

p1=MakeEmpty(NULL);

p2=MakeEmpty(NULL);

readPoly(p1);

readPoly(p2);

result=product(p1,p2);

PrintPoly(p1);

PrintPoly(p2);

PrintPoly(result);

return 0;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值