多項式的相加

2022-07-22 03:45:11 字數 4437 閱讀 4520

假如說我們現在有下面兩個多項式:

①a(x)=3x2+4x5+5x3-x1

②b(x)=4x3+7x2+3x1

這兩個多項式在計算機中用鍊錶的來儲存

根據多項式相加的運算規則:對兩個多項式中所有指數相同的項,對應係數想加,若其和不為零,則作為「和多項式」中的一項插入到「和多項式」鍊錶中去;對於兩個多項式中指數不相同的項,則將指數較小的項插入到「和多項式」鍊錶中去。「多項式」鍊錶中的節點無需生成,而應該從兩個多項式的鍊錶中摘取。

1.預處理部分

#include using

namespace

std;

#define ok 1

#define error 0

#define elemtype int

int flag = 1; //

定義乙個標誌變數,來區分輸出的f(x)

2.結構體

鍊錶的每個節點都有三個,係數(data)、指數(index)和乙個指標域(next)。

typedef struct polyn     //

定義乙個結構體,包括三個成員變數

polyn,*linklist;

3.輸出鍊錶

輸出鍊錶是為了便於觀察我們建立的鍊錶,以及後面輸出同型別和的鍊錶。

具體實現:①首先宣告乙個指標指向首元結點

②while,在p不為空的情況下按照多項式的形式輸出節點,並按照係數的正負,分情況輸出

void printf_polyn(linklist l)   //

輸出鍊錶

else cout

p=p->next; //

指標下移

} cout

<

}

4.對鍊錶進行排序

使用選擇排序,對鍊錶每個元素進行排序

具體實現:①定義乙個中間變數,便於後面的資料交換。

②排序時,首先取到第乙個結點的指數,逐個與後面結點的指數比較,第二次用第二個結點的指數與後面結點指數比較,依次類推。

③如果前面的指數比後面的指數大,就交換,這樣比下去即可實現排序

void sort_polyn(linklist &l)     //

使用選擇法對鍊錶進行排序}}

printf_polyn(l);

//輸出鍊錶

flag++;

}

5.建立鍊錶

採用尾插法建立鍊錶。

void creat_polyn(linklist &l)      //

尾插法建立鍊錶

else cout<

現在輸入第二個多項式

"<

cout

<

請輸入你要建立的項數:";

cin>>n; //

輸入項數

polyn *p,*r; //

乙個新建節點的指標和乙個尾指標

l = new polyn; //

初始化頭節點

l->next =null;

r =l;

cout

<

請輸入係數和指數(係數和指數之間用空格隔開):";

for(int j = 1;j <= n;j++) //

迴圈n次,每次新建乙個節點

}

6.鍊錶的合併

基本的思想就是分別先定義兩個指標分別指向兩個鍊錶,至於兩個鍊錶的和,可以新建乙個鍊錶來存放,也可以直接用兩個鍊錶的其中乙個來儲存。我這裡用的la儲存,那麼也需要乙個指標來指向它,就是r。做好這些我們就可以來進行比較了,la中每個結點與lb的每個結點進行比較,會出現三種情況,第一種:la的大於lb,就將la的結點接到r上,然後指la的指標下移。第二種,la的小於lb,就將lb的結點接到r上,然後lb的指標下移。第三種:la等於lb,那就將兩個結點之和相加,這時候先判斷兩個之和是否為0,不為0,就將兩者之和賦給la的結點,並將該結點接上,然後刪除lb的節點。如果兩者之和為0.則將兩個節點都刪除。

void addit_polyn(linklist l1,linklist l2)  //

將兩個鍊錶相加的函式

else

if(p1->index > p2->index)//

判斷——如果p1的指數大於p2的指數,就將p2插到l1所指的鍊錶

else

if(p1->index == p2->index) //

判斷——如果p1的指數等於p2的指數

else

//如果p1、p2係數之和為0

}r->next = null; //

結束迴圈時,先讓鍊錶和的鍊錶的尾部指向空

}

if(p1 != null) //

判斷剩餘的p1是否為空

else

if(p2!=null) //

判斷剩餘的p2是否為空

printf_polyn(l1);

//輸出鍊錶

}

7.主程式

首先新建兩個煉表頭指標,然後只需分別呼叫上面的函式即可

int

main()

8.完整**

#include using

namespace

std;

#define ok 1

#define error 0

#define elemtype int

int flag = 1; //

定義乙個標誌變數,來區分輸出的f(x)

typedef struct polyn //

定義乙個結構體,包括三個成員變數

polyn,*linklist;

void printf_polyn(linklist l) //

輸出鍊錶

else cout

p=p->next; //

指標下移

} cout

<

}void sort_polyn(linklist &l) //

使用選擇法對鍊錶進行排序}}

printf_polyn(l);

//輸出鍊錶

flag++;

}void creat_polyn(linklist &l) //

尾插法建立鍊錶

else cout<

現在輸入第二個多項式

"<

cout

<

請輸入你要建立的項數:";

cin>>n; //

輸入項數

polyn *p,*r; //

乙個新建節點的指標和乙個尾指標

l = new polyn; //

初始化頭節點

l->next =null;

r =l;

cout

<

請輸入係數和指數(係數和指數之間用空格隔開):";

for(int j = 1;j <= n;j++) //

迴圈n次,每次新建乙個節點

}void addit_polyn(linklist l1,linklist l2) //

將兩個鍊錶相加的函式

else

if(p1->index > p2->index)//

判斷——如果p1的指數大於p2的指數,就將p2插到l1所指的鍊錶

else

if(p1->index == p2->index) //

判斷——如果p1的指數等於p2的指數

else

//如果p1、p2係數之和為0

}r->next = null; //

結束迴圈時,先讓鍊錶和的鍊錶的尾部指向空

}

if(p1 != null) //

判斷剩餘的p1是否為空

else

if(p2!=null) //

判斷剩餘的p2是否為空

printf_polyn(l1);

//輸出鍊錶

多項式相加

include include include typedef struct polyn pol 建立有序多項式 pol creatpolyn else if cnew expn clast expn else cnew pol malloc sizeof pol scanf d d cnew co...

多項式相加

include include typedef struct node 多項式資料型別的定義 polynode polynode createpoly 建立鍊錶 r next null return l void addpoly polynode pa,polynode pb 兩個多項式相加 els...

多項式相加

一.題目描述 輸入兩個多項式,按照指數遞增輸入 輸出相加和。二.題目分析 在書中第二章節中出現了多項式相加的演算法,使用鍊錶實現的,在此簡單使用結構體構造多項式的項。三.include define n 10 typedef struct item int m,n,k 0 item a n b n ...