資料結構中之單鏈表實現多項式的加減

2021-06-27 02:04:13 字數 1366 閱讀 7581

一般情況多項式主要由係數,冪來進行表示。在多項式進行相加時,至少有兩個或兩個以上的多項式同時並存,而且運算過程中產生的中間多項式以及結果多項式的項數和指數都不可**,因此在進行多項式相加時,採用順序表時必然會產生大量的空間浪費,計算機中常採用鍊錶來進行表示多項式。

1、多項式主要由係數和冪組成,因此表達多項式的鍊錶結構如下所示:

typedef struct node

node;

2、

分析:假設鍊錶ah表示多項式1,鍊錶bh表示多項式2,鍊錶ch表示多項式1與多項式2相加的結果鍊錶。假設pa指向鍊錶ah的表頭,pb指向鍊錶bh的表頭,多項式相加時依次移動pa與pb,當pa!=null&&pb!=null時會存在以下三種情況:

(1)當pa->exp>pb->exp時,把pa的係數與冪數構建乙個新的結點,加到新的結果鍊錶ch中,同時pa指向下一結點,pb不變。

(2)當pa->exp==pb->exp時,把pa的係數相加,如果之和不為0的話,建立新的結點加到結果鍊錶ch中,同時pa指向下一結點,pb也指向下一結點。

(3)當pa->expexp時,同理,只不過pa保持不變,pb指向下乙個結點。

執行完成後,如果還存在pa!=null或者pb!=null的情況,則把剩下的部分全部加到ch的鍊錶中。

為了更方便的新增新的節點,這裡先實現乙個新增節點到ch鍊錶的函式,並且把指標指向鍊錶的尾部。

//在鍊錶後面新增乙個新的節點,並把pc指向該鍊錶的表尾,注意需要傳遞指標的引用;

void attach(float conf,int exp,node* &pc)

3、編寫多項式相加的演算法,根據上文的分析,不難實現多項式相加的演算法,如下所示:

/**

多項式a表達成單鏈表形式ah;

多項式b表達成單鏈表形式bh;

多項式c為運算後的結果表示成單鏈表的形式;

*/void add(node* ah,node* bh, node* &ch)

else if(pa->exp==pb->exp)

//如果多項式a的冪的係數等於多項式b的冪係數;

}else if(pa->expexp)

//如果多項式a的冪的係數小於多項式b的冪係數;

}while(pb!=null)

while(pa!=null)

pc->next=null;

node* q=ch;

ch=ch->next;

free(q);

}

4、總結:多項式相加的演算法,時間主要是花費在比較和係數相加上,如果a(x)有m項,b(x)有n項,則該演算法運動的時間為o(n+m)。

資料結構 單鏈表實現多項式加法

要求 有兩組多項式,每組隨機輸入n組數,每組數輸入兩個值a,b,a代表係數,b代表指數,輸入資料無任何限制 只要是數字即可 思路 1.建立兩個鍊錶l1,l2分別存放兩組多項式 2.比較每組多項式,如果指數相同就把他們係數相加 詳解在下面 3.列印輸出 比較的詳解 在存放多項式的時候對存入資料進行排序...

單鏈表實現多項式相加

include include struct node void destroypoly struct node poly 釋放實現多項式申請的空間 return struct node createnode int coe,int exp 申請空間存放多項式當前項 struct node crea...

單鏈表實現多項式相加

本程式使用鍊錶實現了兩個多項式的相加。多項式的相加主要是考慮相加項的指數是否相同,如果相同則係數相加,指數不變。本程式當中,實現該過程的思想為,在錄入乙個多項式所有項的係數和指數以後,使用鍊錶思想構造一條單鏈表,記作鍊錶a,結 點儲存項的係數和指數。依照此法,構建第二條多項式鍊錶,記作鍊錶b。這樣準...