链表实现一元多项式相加

风格不统一 提交于 2019-12-05 17:29:08

一元多项式相加,多项式相加

#include<stdlib.h>
#include<stdio.h>
typedef struct pnode
{
   float coef; //系数域
   int exp;    //指数域
   struct pnode *next;  //指针域
}PolyNode;
PolyNode *PolyAdd(PolyNode *A,PolyNode *B)
{
   int i,j,k;
   float x;
   PolyNode *q1,*q2,*ptr,*q;  /*q1指向A,q2指向B,ptr保存两个式子相加结果*/
   q1=A;
   q2=B;
   q=malloc(sizeof(PolyNode));
   q->coef=0;
   q->exp=-1;
   q->next=NULL;
   ptr=q;
   q1=q1->next;
   q2=q2->next;
   while((q1!=NULL)&&(q2!=NULL))  //当两个多项式都没有合并结束的时候
   {
        if(q1->exp==q2->exp)     //两个多项式系数相等的时候
        {
            x=q1->coef+q2->coef;
            if(x!=0)       //将保存相加的这项保存到ptr中
            {
                q->next=malloc(sizeof(PolyNode));
                q=q->next;
                q->coef=x;
                q->exp=q1->exp;
            }
            q1=q1->next;
            q2=q2->next;

        }
        else     //指数不想等的时候,将指数小的放在和多项式子中
        {
            q=malloc(sizeof(PolyNode));   
            q=q->next;
            if(q1->exp>q2->exp)
            {
                q->coef=q2->coef;
                q->exp=q2->exp;
                q2=q2->next;
            }
            else
            {
                q->coef=q1->coef;
                q->exp=q1->exp;
                q1=q1->next;   
            }  
        }
   }
   //当A多项式子有剩余的时候将剩余的项合并在和多项式中
   while(q1!=NULL)
   {
    q->next=malloc(sizeof(PolyNode));
    q=q->next;
    q->coef=q1->coef;
    q->exp=q1->exp;
    q1=q1->next;
   }
   //当B多项式子有剩余的时候将剩余的项合并在和多项式中
   while(q2!=NULL)
   {
    q->next=malloc(sizeof(PolyNode));
    q=q->next;
    q->coef=q2->coef;
    q->exp=q2->exp;
    q2=q2->next;
   }
   q->next=NULL;
   return ptr;
}
PolyNode *Create()
{
   float q;
   int n,i;
   PolyNode *head,*s,*r;
   head=malloc(sizeof(PolyNode));
   r=head;
   r->coef=-1;
   r->exp=0;
   r->next=NULL;
   i=1;
   printf("请输入第%d项系数和指数:\n",i);
   scanf("%f%d",&q,&n);
   while(n!=-1)
   {
      s=malloc(sizeof(PolyNode));
      s->coef=q;
      s->exp=n;
      r->next=s;
      r=s;
      i++;
      printf("请输入第%d项系数和指数:\n",i);
      scanf("%f %d",&q,&n);
   }
   r->next=NULL;
   return head;

}
void Print(PolyNode *q)
{
    PolyNode *p;
    p=q->next;
    while(p!=NULL)
    {
        printf("%5.1f^%d",p->coef,p->exp);
        p=p->next;
        if(p!=NULL)
        {
            printf("+");
        }
    }
    printf("\n");
}
int main()
{
   PolyNode *A,*B,*C;
   A=Create();
   B=Create();
   C=PolyAdd(A,B);
   Print(A);
   Print(B);
   Print(C);
}

 

问题说明

求两个一元多项式 A(x) = a0 + a1x + a2x2 + … + anxn 和 B(x) = b0 + b1x + b2x2 + … + bmxm 的和。
要求:分别输入两个多项式的各个系数和指数。要求程序输出多项式的和。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!