头文件
//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,以示表结束*/
}
//common.h
#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"
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;
}
}