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

2021-10-24 19:57:16 字數 3122 閱讀 8341

要求:有兩組多項式,每組隨機輸入n組數,每組數輸入兩個值a,b,a代表係數,b代表指數,輸入資料無任何限制(只要是數字即可)

思路:

1.建立兩個鍊錶l1,l2分別存放兩組多項式

2.比較每組多項式,如果指數相同就把他們係數相加(詳解在下面)

3.列印輸出

比較的詳解:

在存放多項式的時候對存入資料進行排序,按指數從大到小或者從小到大都可,我是按從大到小排的。

然後建立三個指標分別是指向l1的指標,指向l2的指標和指向l1的工作指標,工作指標指向l1是借助l1來存放加完之後的多項式鍊錶。

接著比較兩個多項式的指數,如果指數相同就相加係數,移動指標,具體移動方式在**中都有備註

所有加法做完後,因為對輸入資料沒有要求,可能出現多個重複相等的指數項,通過查重的方式來刪除掉後續重複結點

**

#include

#include

using

namespace std;

typedef

struct pnodepnode,

*polynomial;

bool

createpoly

(polynomial *l)

;void

showpoly

(polynomial l)

;bool

addpoly

(polynomial *la,polynomial *lb)

;polynomial recursedelete

(polynomial l)

;int

main()

bool

createpoly

(polynomial *l)

pnode *temp;

//臨時結點

temp =

new pnode;

//臨時結點開空間

cout <<

"enter the "

<< i <<

" coe: "

;//輸入係數

cin >> temp-

>coe;

cout <<

"enter the "

<< i <<

" index: "

;//輸入指數

cin >> temp-

>index;

p =*l;//頭指標指向表頭

q =(*l)

->next;

//尾指標指向頭結點的後繼

while

(q && q-

>index > temp-

>index)

temp-

>next = q;

//臨時結點後繼指向尾指標所在單元

p->next = temp;

//頭指標後繼指向臨時結點

i++;//計數+1

}return

true;}

void

showpoly

(polynomial l)

else

if(pshow-

>coe ==

1&& pshow-

>index !=1)

//係數是1指數不是1的情況

else

if(pshow-

>coe ==

1&& pshow-

>index ==1)

//係數是1指數也是1的情況

else

if(pshow-

>index ==0)

//指數是0的情況

else

//普通情況

cout << pshow-

>coe <<

"x^"

<< pshow-

>index <<

'+';

}else

//判斷最後乙個結點的情況

else

if(pshow-

>coe ==

1&& pshow-

>index ==1)

//係數是1指數也是1的情況

else

if(pshow-

>index ==0)

//指數是0的情況

else

//普通情況

cout << pshow-

>coe <<

"x^"

<< pshow-

>index;

} pshow = pshow-

>next;

//結點後移

} cout << endl;

}bool

addpoly

(polynomial *la,polynomial *lb)

}else

if(p1-

>index < p2-

>index)

//如果p2的指數比p1的指數大

else

//如果p2的指數比p1的指數小 }if

(p1)

//如果p1較長

pwork-

>next = p1;

//工作指標指向p1

else

//否則p2較長

pwork-

>next = p2;

//工作指標指向p2

delete

*lb;

//釋放lb鍊錶所在空間

recursedelete

(polynomial (

*la));

//查重

}polynomial recursedelete

(polynomial l)

pwork = pwork-

>next;

//指標後移 }if

(l)recursedelete

(l->next)

;//表頭指向下乙個,再次遞迴遍歷

}}

總結缺點

**不夠簡單明瞭,最後選擇遞迴查重效率比較低,列印輸出有些混亂,大神勿噴,互相學習互相進步,相信以後會寫出更優秀的**

單鏈表實現有序多項式加法

原理講解 使用鍊錶表示一元多項式 設多項式pn x a0 a1x a2x2 an xn其中ai i 0,1,2,n 是x的i次冪 的係數。在計算機中可使用乙個結點存放多項式的一項。如果採用順序儲存結構來儲存此線性表,由於多項式中可能有多項的係數為0,順序儲存就會浪費大量儲存空間。故應採用單鏈表來儲存...

單鏈表實現多項式的儲存和加法

採用單向鍊錶實現一元多項式的儲存並實現兩個多項式相加並輸出結果。演算法分析 不採用申請新節點的方法,要充分利用老節點。實現如下 include include include using namespace std typedef struct node jd,linklist linklist c...

資料結構 鍊錶 多項式加法

問題描述 用單鏈表儲存一元多項式,並實現兩個多項式的加法。可以看出,這種方案適合對某些多項式的處理。但是,在處理一些次數高但項數少的多項式時,存在浪費空間的現象,會有很多閒置的0。可以使用如下定義的單鏈表結構儲存多項式 鍊錶中的每乙個結點是多項式中的一項,結點的資料域包括指數和係數兩部分,由指標域連...