日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多项式加法 java 链表_多项式加法,用单链表实现。

發(fā)布時間:2025/4/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多项式加法 java 链表_多项式加法,用单链表实现。 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

---恢復(fù)內(nèi)容開始---

#include

#include

typedef struct PolyNode *Polynomial;

struct PolyNode{

int coef;//系數(shù)

int expon;//指數(shù)

Polynomial link;//鏈表指針域指向下一地址

};

Polynomial ReadPoly();//讀入多項式

void Attach(int c,int e,Polynomial *pRear);//將每次讀入的多項式連接

Polynomial Add(Polynomial P1,Polynomial P2);//多項式相加

Polynomial Mult(Polynomial P1,Polynomial P2);//多項式相乘

int Compare(int a,int b);//比較

void PrintPoly(Polynomial P);//輸出多項式

int main(void)

{

Polynomial P1,P2,PS,PP;

P1=ReadPoly();//讀入數(shù)據(jù)

P2=ReadPoly();

PP=Mult(P1,P2);//多項式相乘

PrintPoly(PP);

printf("\n");

PS=Add(P1,P2);//多項式相加

PrintPoly(PS);

return 0;

}

Polynomial ReadPoly()//讀入數(shù)據(jù)

{

Polynomial P,Rear,t;

int c,e,N;

scanf("%d",&N);

P=(Polynomial)malloc(sizeof(struct PolyNode));//為方便表頭插入,先產(chǎn)生一個臨時空節(jié)點做為鏈表頭

P->link =NULL;

Rear=P;//Rear始終指向鏈表的尾部

while(N--)

{

scanf("%d %d",&c,&e);

if(c!=0)//對系數(shù)為零的項進行判斷

Attach(c,e,&Rear);

}

t=P;//釋放表頭為空的節(jié)點

P=P->link ;

free(t);

return P;

}

void Attach(int c,int e,Polynomial *pRear)//將數(shù)據(jù)連接成鏈表

{

Polynomial P;

P=(Polynomial)malloc(sizeof(struct PolyNode));//為方便表頭插入,先產(chǎn)生一個臨時空節(jié)點做為鏈表頭

P->coef=c;

P->expon=e;

P->link =NULL;

(*pRear)->link=P;//將P指向的新節(jié)點插入到當(dāng)前結(jié)果表達式尾項的后面

*pRear=P;//最后一項指向P

}

int Compare(int a,int b)//比較 ,a>b return 1,a

{

if(a>b)

return 1;

else if(a==b)

return 0;

else

return -1;

}

Polynomial Add(Polynomial P1,Polynomial P2)//多項式相加

{

Polynomial front,rear,temp;//front為頭,Rear為尾

int sum;

rear=(Polynomial)malloc(sizeof(struct PolyNode));//為方便表頭插入,先產(chǎn)生一個臨時空節(jié)點做為鏈表頭

front=rear;

while(P1&&P2)

switch(Compare(P1->expon ,P2->expon))

{

case 1://如果P1->expon>P2->expon

Attach(P1->coef,P1->expon,&rear);

P1=P1->link ;

break;

case -1://如果P1->exponexpon

Attach(P2->coef,P2->expon,&rear);

P2=P2->link ;

break;

case 0://如果P1->expon=P2->expon

sum=P1->coef +P2->coef;

if(sum)//如果指數(shù)相等,先判斷系數(shù)和是否為0

Attach(sum,P1->expon,&rear);

P1=P1->link;

P2=P2->link ;

break;

}

//將未處理完的多項式中所有節(jié)點復(fù)制到結(jié)果多項式中

while(P1)

{

Attach(P1->coef,P1->expon,&rear);

P1=P1->link;

}

while(P2)

{

Attach(P2->coef,P2->expon,&rear);

P2=P2->link;

}

rear->link=NULL;//釋放頭為空的節(jié)點

temp=front;

front=front->link ;

free(temp);

return front;

}

void PrintPoly(Polynomial P)//打印

{

int flag=0;

if(!P)

{

printf("0 0");

return ;

}

while(P)

{

if(!flag)

flag=1;

else

printf(" ");

printf("%d %d",P->coef ,P->expon );

P=P->link ;

}

}

Polynomial Mult(Polynomial P1, Polynomial P2)//多項式相乘

{

Polynomial P, Rear;

Polynomial t1, t2, t;

if (!P1 ||!P2)//判斷兩個鏈表是否為空

{

return NULL;

}

t1 = P1;

t2 = P2;

P = (Polynomial)malloc(sizeof(struct PolyNode));

Rear = P;

while (t2)//先讓t1的第一項和t2的每一項相乘,構(gòu)建出一個新鏈表,用于后來數(shù)據(jù)的插入

{

Attach(t1->coef*t2->coef, t1->expon + t2->expon, &Rear);

t2 = t2->link;

}

t1 = t1->link;

while (t1)

{

t2 = P2;

Rear = P;//Rear每次都從所構(gòu)建的鏈表頭開始,以便于尋找插入位置

while (t2)

{

int c = t1->coef*t2->coef;

int e = t1->expon + t2->expon;

while (Rear->link&&Rear->link->expon > e)//Rear每次都從所構(gòu)建的鏈表頭開始,以便于尋找插入位置

{

Rear = Rear->link;

}

if (Rear->link&&Rear->link->expon == e)//相等就不需要申請一個新的節(jié)點,只要把系數(shù)相加。

{

if (Rear->link->coef + c)//系數(shù)和不為0,

{

Rear->link->coef += c;

}

else//系數(shù)和為0,刪除節(jié)點

{

t = Rear->link;

Rear->link = t->link;

free(t);

}

}

else//如果指數(shù)不相等,申請空間將將此項插入

{

t = (Polynomial)malloc(sizeof(struct PolyNode));

t->link = NULL;

t->coef = c;

t->expon = e;

t->link = Rear->link;

Rear->link = t;

Rear = Rear->link;

}

t2 = t2->link;

}

t1 = t1->link;

}

t2 = P;//釋放空節(jié)點

P = P->link;

free(t2);

return P;

}別人的代碼。不過好像有問題。有時間再改🙄

總結(jié)

以上是生活随笔為你收集整理的多项式加法 java 链表_多项式加法,用单链表实现。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。