单链表实现一元多项式相加

文章目录

  • 输入输出一元多项式的规则
  • 多项式中某项的结点结构
  • 生成多项式
  • 对多项式进行相加
  • 输出多项式
  • 释放空间
  • 主函数

输入输出一元多项式的规则

输入时按顺序输入一元多项式的系数、指数;输入系数和指数都为0时,表述输入结束。
单链表实现一元多项式相加_第1张图片

多项式中某项的结点结构

//存放多项式某项的结点结构 
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 
#include  
int main(void)
{
	PNODE  polyAddLeft, polyAddRight ,polyAddResult ;
	//分别创建存放两个多项式的链表
	polyAddLeft = createPoly();
 	polyAddRight = createPoly();
 	//存放最终结果
 	polyAddResult = addPoly(polyAddLeft,polyAddRight);
 	
 	printPoly(polyAddResult);//输出最终结果
 	//释放空间
    destroyPoly(polyAddLeft);
    destroyPoly(polyAddRight);
    destroyPoly(polyAddResult);
	
}

你可能感兴趣的:(链表,单链表,c语言)