1. 程式人生 > >C語言實現一元多項式的建立、相加

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;                                  //q1是q的前驅

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);

}

執行結果可以參照截圖