多项式加法运算链表实现

struct PolyNode{
	int coef;//系数 
	int expon;//指数 
	struct PolyNode *link;//指向下一个结点的指针 
}; 
typedef struct PolyNode *Polynomial;
Polynomial P1,P2; 
Polynomial PolyAdd(Polynomial P1,Polynomial P2)//多项式加法链表实现 
{
	Polynomial front,rear,temp;
	int sum;
	rear=(Polynomial)malloc(sizeof(struct PolyNode));
	front=rear;//由front记录结果多项式链表头结点 
	while(P1&&P2)//当两个多项式都有非零项待处理时 
		switch(Compare(P1->expon,P2->expon)){
/*第一个值大*/	case 1:
			Attach(P1->coef,P1->expon,&rear);
			P1=P1->link;
			break;
/*第二个值大*/	case -1:
			Attach(P2->coef,P2->expon,&rear);
			P2=P2->link;
			break;
/*两个值相等*/	 case 0:
			sum=P1->coef+P2->coef;
			if(sum)Attach(sum,P1->expon,&rear);
			P1=P1->link;
			P2=P2->link;
			break;	
		} //当while退出时,P1、P2有一个为空。
//将未处理完的另一个多项式的所有结点依次复制到结果多项式中去 
for(;P1;P1=P1->link)Attach(P1->coef,P1->expon,&rear);//P1不空
for(;P2;P2=P2->link)Attach(P2->coef,P2->expon,&rear);//P2不空
rear->link=NULL;
temp=front;
front=front->link;//令front指向结果多项式第一个非零项 
free(temp);//释放临时空表头结点 
return front; 
}
void Attach(int c,int e,Polynomial *pRear)//*pRear是指针的指针 
{
	Polynomial P;
	P=(Polynomial)malloc(sizeof(struct PolyNode));
	P->coef=c;//对新结点赋值 
	P->expon=e;
	P->link=NULL;
	(*pRear)->link=P;
	*pRear=P;//修改pRear的值 
}

 

转载于:https://www.cnblogs.com/chy89224/p/6379659.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值