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);
}
執行結果可以參照截圖