日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

---恢復內容開始---

#include

#include

typedef struct PolyNode *Polynomial;

struct PolyNode{

int coef;//系數

int expon;//指數

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();//讀入數據

P2=ReadPoly();

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

PrintPoly(PP);

printf("\n");

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

PrintPoly(PS);

return 0;

}

Polynomial ReadPoly()//讀入數據

{

Polynomial P,Rear,t;

int c,e,N;

scanf("%d",&N);

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

P->link =NULL;

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

while(N--)

{

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

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

Attach(c,e,&Rear);

}

t=P;//釋放表頭為空的節點

P=P->link ;

free(t);

return P;

}

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

{

Polynomial P;

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

P->coef=c;

P->expon=e;

P->link =NULL;

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

*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));//為方便表頭插入,先產生一個臨時空節點做為鏈表頭

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)//如果指數相等,先判斷系數和是否為0

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

P1=P1->link;

P2=P2->link ;

break;

}

//將未處理完的多項式中所有節點復制到結果多項式中

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;//釋放頭為空的節點

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的每一項相乘,構建出一個新鏈表,用于后來數據的插入

{

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

t2 = t2->link;

}

t1 = t1->link;

while (t1)

{

t2 = P2;

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

while (t2)

{

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

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

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

{

Rear = Rear->link;

}

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

{

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

{

Rear->link->coef += c;

}

else//系數和為0,刪除節點

{

t = Rear->link;

Rear->link = t->link;

free(t);

}

}

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

{

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;//釋放空節點

P = P->link;

free(t2);

return P;

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。