输入输出一元多项式的规则
输入时按顺序输入一元多项式的系数、指数;输入系数和指数都为0时,表述输入结束。
多项式中某项的结点结构
//存放多项式某项的结点结构
struct node
{
int coef ; //表示系数
int exp ; // 表示指数
struct node *next; //指向下一个结点的指针
};
typedef struct node * PNODE ;
生成多项式
实现创建一个多项式并返回多项式头指针的函数
注意:头指针不存放多项式的项。
PNODE createPoly(void)
{
//实现创建一个多项式并返回多项式头指针的函数
//注意:头指针不存放多项式的项。
int i = 1, j = 1;//i表示系数,j表示指数
PNODE L = (PNODE)malloc(sizeof(struct node));
PNODE list = L;
while (i != 0 || j != 0)
{
PNODE temp = (PNODE)malloc(sizeof(struct node));
printf("请输入系数的值:\n");
scanf("%d", &i);
printf("请输入指数的值:\n");
scanf("%d", &j);
temp->coef = i;
temp->exp = j;
temp->next = NULL;
list->next = temp;
list = list->next;
}
return L;
}
对多项式进行相加
函数参数:
polyAddLeft :加法左边多项式头指针;polyAddRight:加法右边多项式头指针 ;返回值:指向结果多项式的头指针 。
PNODE addPoly(PNODE polyAddLeft , PNODE polyAddRight)
{
//实现创两个多项式相加并返回结果多项式头指针的函数
PNODE p,q,list,tail,temp;
list=(PNODE)malloc(sizeof(PNODE));
tail=list;
p=polyAddLeft->next;
q=polyAddRight->next;
while(p!=NULL&&q!=NULL)
{
if(p->exp<q->exp)
{
temp=(PNODE)malloc(sizeof(PNODE));
temp->exp=p->exp;
temp->coef=p->coef;
tail->next=temp;//使tail一直指向尾节点
tail=temp;
p=p->next;
}
else if(p->exp==q->exp)
{
int sum;
sum=p->coef+q->coef;
if(sum!=0)
{
temp=(PNODE)malloc(sizeof(PNODE));
temp->exp=p->exp;
temp->coef=sum;
tail->next=temp;
tail=temp;
}
p=p->next;
q=q->next;
}
else if(p->exp>q->exp)
{
temp=(PNODE)malloc(sizeof(PNODE));
temp->exp=q->exp;
temp->coef=q->coef;
tail->next=temp;
tail=temp;
q=q->next;
}
}
while(p!=NULL)
//若p所在链表还有剩余项,直接将剩余项依次链入头结点为list的链表中
{
temp=(PNODE)malloc(sizeof(PNODE));
temp->exp=p->exp;
temp->coef=p->coef;
tail->next=temp;
tail=temp;
p=p->next;
}
while(q!=NULL)
//若q所在链表还有剩余项,直接将剩余项依次链入头结点为list的链表中
{
temp=(PNODE)malloc(sizeof(PNODE));
temp->exp=q->exp;
temp->coef=q->coef;
tail->next=temp;
tail=temp;
q=q->next;
}
tail->next=NULL;
return list;
}
输出多项式
void printPoly(PNODE poly)
{
//输出多项式的功能
PNODE p;
p=(PNODE)malloc(sizeof(PNODE));
for(p=poly->next;p!=NULL;p=p->next)
{
if(p->coef!=0)
{
printf("%dx^%d",p->coef,p->exp);
}
if(p->next!=NULL&&p->next->coef>0)
{
printf("+");
}
}
return;
}
释放空间
void destroyPoly(PNODE poly)
{
//释放存储多项式的链表空间
PNODE p;
p=(PNODE)malloc(sizeof(PNODE));
for(p=poly;p!=NULL;p=p->next)
{
free(p);
}
return;
}
主函数
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
PNODE polyAddLeft, polyAddRight ,polyAddResult ;
//分别创建存放两个多项式的链表
polyAddLeft = createPoly();
polyAddRight = createPoly();
//存放最终结果
polyAddResult = addPoly(polyAddLeft,polyAddRight);
printPoly(polyAddResult);//输出最终结果
//释放空间
destroyPoly(polyAddLeft);
destroyPoly(polyAddRight);
destroyPoly(polyAddResult);
}