C语言实现一元多项式的创建、相加

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1

typedef struct pNode                                    //建立一元多项式

{

int coef; //系数

int exp;//指数

struct pNode* link;

}pNode;

typedef struct

{

int n;

struct pNode *head;

}polynominal;

void Create(polynominal *p)                          //生成表头结点

{

pNode *pn,*pre,*q;

p->head=malloc(sizeof(pNode));

p->head->exp=-1;

p->head->link=NULL;

for(;;)

{

pn=malloc(sizeof(pNode));

printf("coef:\n");

scanf("%d",&pn->coef);                         //输入项的系数

    printf("exp:\n");

scanf("%d",&pn->exp);                          //输入项的指数

  if (pn->exp<0) break;                              //若输入项指数负数,结果输入

   pre=p->head;

   q=p->head->link;

   while(q&&q->exp>pn->exp)                       //插入项并保证多项式的各项为降幂排列

{

pre=q;

q=q->link;

}

   pn->link=q;

   pre->link=pn;

}

}

void Add(polynominal *px,polynominal *qx)        //相加操作

{

pNode *q,*q1=qx->head,*p,*temp;                //q1指向表头结点

p=px->head->link;                             //p指向多项式px的第一个结点

q=q1->link;                                  //q1q的前驱

while(p&&q)

{

while(p->exp<q->exp)                       //跳过q->exp大的项

{

q1=q;

q=q->link;

}

if(p->exp==q->exp)

{

q->coef=q->coef+p->coef;

if(q->coef==0)

{

q1->link=q->link ;

free(q);

q=q1->link;

p=p->link;

}

else

{

q1=q;

q=q->link;

p=p->link;

}

}

else

{

temp=malloc(sizeof(pNode));              //生成新的一维数组

temp->coef=p->coef;

temp->exp=p->exp;

temp->link=q1->link;

            q1->link=temp;

p=p->link;

}

}

}

int Output(polynominal list1)

{       

int i=0;

pNode *pn;

if(!list1.head)

return ERROR;

pn=list1.head;

for(i=0;i<list1.n;i++)

{  

pn=pn->link;

printf("%d,%d",pn->coef,pn->exp);

}

     return OK;

}

void output(polynominal *p)                    //多项式输出函数

{

PNode *q;

if(!p->head->link)                       //判断多项式是否为空

return ;

q=p->head->link;                        //单独输出第一项

printf("%d*x^%d",q->coef,q->exp);

q=q->link;

while(q)

{   if(q->exp==0)                        //对常数项的输出

if(q->coef>0)                        //常数系数>0的情况

    printf("+%d",q->coef);

    else printf("%d",q->coef);               //常数系数<0的情况

else if(q->coef>0)                      //非常数项项系数>0情况

printf("+%d*x^%d",q->coef,q->exp);  

else                                  //非常数项系数<0的情况

printf("%d*x^%d",q->coef,q->exp);

q=q->link;

}

}

void main()

{

polynominal list1;

polynominal list2;

Create (&list1);

printf("\nthe linklist is:");

Output(&list1);

Create (&list2);

printf("\nthe linklist is:");

Output(&list2);

Add(&list1,&list2);

}

执行结果可以参照截图


猜你喜欢

转载自blog.csdn.net/qq_42329300/article/details/80485893