//单链表1-求两个多项式的加法

/求两个多项式的加法
//求两个多项式的加法。就是现将两个多项式合并后。接着根据exp进行判断
//如果两个exp的系数相反,说明他们相加后系数为0,抵消了。所以将他们的节点都free
//if节点系数相同时,则一个节点改变系数,同时释放另一个节点。


#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct List
{
int exp;//指数幂
int coef;//系数
struct List *next;
}NODE,*Node;
Node create_List();
void traverse_List(Node);
void add_List(Node,Node);
int main(void)
{
Node Head,head;
Head=create_List();
traverse_List(Head);
head=create_List();
traverse_List(head);
add_List(Head,head);
traverse_List(Head);
return 0;
}
Node create_List()
{
Node Head,p,s;
int exp,coef;//用来存放指数和系数
Head=(Node)malloc(sizeof(NODE));
if(!Head)
{
printf("动态内存分配失败!\n");
exit(-1);
}
Head->next=NULL;//初始化。建立一个空表头
p=Head;//始终指向尾指针。
printf("输入多项式的系统指数,列如(10,2)系数为0,0结束:");
//scanf("%d,%d",&coef,&exp);
while(scanf("%d,%d",&coef,&exp)&&coef!=0)//成功输入两个数而且系数不为0
{
s=(Node)malloc(sizeof(NODE));
if(!s)
{
printf("动态内存分配失败!\n");
exit(-1);
}
s->exp=exp;
s->coef=coef;
p->next=s;
p=s;

}
p->next=NULL;
return Head;


}
void traverse_List(Node Head)
{
Node p;
for(p=Head->next;p;p=p->next)//遍历到最后一个为节点的指针域为NULL
{
if(p->exp)//这是指数
printf("%d^%d",p->coef,p->exp);
else//如果指数为0的话,就只加系数
printf("%d",p->coef);
if(p->next)//如果下一个节点还存在的话,就'+'
printf("+");
}
printf("\n");
return ;
}
void add_List(Node Head,Node head)
{
Node p,q,r,s;
p=Head->next;
while(p->next)//p是 尾节点
{
//q=p;
p=p->next;
}
p->next=head->next;
free(head);
traverse_List(Head);
printf("多项式相加为:");
for(p=Head;p->next;p=p->next)
for(q=p->next;q->next;q=q->next)
{
if(p->next->exp==q->next->exp)//指数相同时
{
if(p->next->coef!=-(q->next->coef))//系数不相同时(1相反时 2不相反时)
{

p->next->coef+=q->next->coef;
r=q->next;
q->next=r->next;
free(r);
}
else
{
r=p->next;
p->next=r->next;
free(r);
s=q->next;
q->next=s->next;
free(s);
}
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值