鍊錶實現的多項式加法與乘法

2021-08-27 04:21:09 字數 1766 閱讀 1263

[img]

public class node

public node(int a,int i)

public node()

public int geta()

public int geti()

public void seta(int a)

public void seti(int i)

}

多項式類(單鏈表實現)

public class polylist   

//是否為空

public boolean isempty()

//這裡只考慮按順序插入元素

public void insert(node node)

//加法運算

public static polylist add(polylist p1,polylist p2)

else if(p1.current.geti()} while(p1.current!=null)

while(p2.current!=null)

return result;

} //乘法運算

public static polylist multiply(polylist p1,polylist p2)

p1.current=p1.current.next;

p2.current=p2.head.next;

} 合併同類項

result.current=result.head.next;

node tempprevious=result.current;

node temp=result.current.next;

while(result.current.next!=null)else

} result.current=result.current.next;

tempprevious=result.current;

temp=result.current.next;

}

return result;

} }

多項式加法: result 用來儲存結果。p1.current 和 p2.current 分別指向 p1 和 p2 的第乙個元素,比較它們的冪,如果相等,將它們的係數相加,冪不變,這一新項插入到 result 中,p1.current 和 p2.current 都往後移一位;如果 p1.current 所指向的項的冪小於 p2.current ,則把 p1.current 所指向的這一項插入到 result 中,p1.current 後移一位;同樣地,如果 p2.current 所指向的項的冪小於 p1.current ,執行類似的操作。重複這一過程,直到這兩個指標都指向 null 。(在單鏈表中,最後乙個結點的 next 指向null)這裡還有乙個細節,就是這兩個指標中一般都會有乙個先指向 null ,那麼這時候很簡單,把剩下的那個指標往後遍歷,它及其後面所指向的項都插入 result 即可。

乘法運算的演算法比加法還要簡單,同樣result 用來儲存結果, p1.current先固定, p2.current 遍歷,p1.current 的指向乘以 p2.current 所指的每一項,這一次結束後 p1.current 後移一位,重複上述過程,直到 p1.current 指向 null 。不過結果最後有乙個合併同類項的問題。

多項式加法和乘法(鍊錶實現)

資料結構樹上的 練習留著以後複習 polynomial.h include using namespace std struct pnode pnode int d,int c,pnode n null class polynomial polynomial int d,int c bool ins...

鍊錶實現多項式的加法和乘法

ifndef polynomialcompute poly h define polynomialcompute poly h struct polynode typedef struct polynode polynomial void attach int c,int e,polynomial ...

鍊錶應用 多項式加法 乘法

鍊錶學習 多項式應用 通過引入insertpoly函式來完成加法乘法操作 以及類似功能的creat 函式,使我的多項式按照指數下降的方式插入節點 而不需要在輸入時人為的控制 include using namespace std 多項式adt鍊錶實現的型別宣告 typedef struct node...