多项式加法算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#include "common.h"
#include "polylist.h"
typedef struct Polynode
{
int coef;
int exp;
Polynode *next;
}Polynode, *Polylist;
void polycreate(Polylist head)
{
Polynode *rear, *s;
int c,e;
rear=head; /* rear 始终指向单链表的尾,便于尾插法建表*/
scanf("%d,%d",&c,&e); /*键入多项式的系数和指数项*/
while(c!=0) /*若c=0,则代表多项式的输入结束*/ {
s=(Polynode*)malloc(sizeof(Polynode)); /*申请新的结点*/
s->coef=c;
s->exp=e;
rear->next=s; /*在当前表尾做插入*/
rear=s;
scanf("%d,%d",&c,&e);
}
rear->next=NULL; /*将表的最后一个结点的next置NULL,以示表结束*/
}
void polyadd(Polylist polya, Polylist polyb)
/*此函数用于将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式ployb 删除*/
{
Polynode *p, *q, *pre, *temp;
int sum;
p=polya->next; /*令p和q分别指向polya和polyb多项式链表中的第一个结点*/
q=polyb->next;
pre=polya; /* r指向和多项式的尾结点*/
while (p!=NULL && q!=NULL) /*当两个多项式均未扫描结束时*/
{
if (p->exp < q->exp)
/*如果p指向的多项式项的指数小于q的指数,将p结点加入到和多项式中*/ {
pre->next=p;
pre=p;
p=p->next;
}
else
if ( p->exp == q->exp) /*若指数相等,则相应的系数相加*/
{
sum=p->coef + q->coef;
if (sum != 0)
{
p->coef=sum;
pre->next=p;
pre=p;
p=p->next;
temp=q;
q=q->next;
free(temp);
}
else
{
temp=p;
p=p->next;
free(temp);
/*若系数和为零,则删除结点p与q,并将指针指向下一个结点*/
temp=q;
q=q->next;
free(temp);
}
}
else
{
pre->next=q;
pre=q; /*将q结点加入到和多项式中*/
q = q->next;
}
}
if(p!=NULL) /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/ pre->next=p;
else /*否则,将B中的结点加入到和多项式中*/
pre->next=q;
}
void main()
{
Polylist polya,polyb;
Polynode *p;
printf("请输入数据建立多项式A:(以0,0结束!)\n");
polya=(Polynode *)malloc(sizeof(Polynode));
polycreate(polya);
p = polya->next;
while(p!=NULL)
{
printf("%d %d\n",p->coef,p->exp);
p=p->next;
}
printf("请输入数据建立多项式B:(以0,0结束!)\n");
polyb=(Polynode *)malloc(sizeof(Polynode));
polycreate(polyb);
p = polyb->next;
while(p!=NULL)
{
printf("%d %d\n",p->coef,p->exp);
p=p->next;
}
polyadd(polya,polyb);
printf("相加后的多项式为:\n");
p = polya->next;
while(p!=NULL)
{
printf("%d %d\n",p->coef,p->exp);
p=p->next;
}
}。