資料結構學習(C++)——單連結串列應用(一元多項式【2】) (轉)
按照原書的安排,對多項式的講解到上一篇就應該結束了,但我還想做一些延伸。比如說,你很清楚多項式的係數肯定不總是整數,但為什麼用整型呢?我看到原書用的是整型,我也有這個疑問。但是,一旦動起手來,就會發現改成浮點不僅僅只是在定義Term時把int coef;改成float coef;很多的細節都要考慮到(給個提示,你知道浮點零是多少嗎)。我試了一下,最後放棄了;理由是,寫這些只是為了學習,沒必要搞的那麼複雜,能說明問題就可以了。:namespace prefix = o ns = "urn:schemas--com::office" />
在下面將會有些過載運算子的例子,我們的工作將是使多項式的運算看起來更符合書寫習慣。完成這些是我覺得我擅自將原書的“+”改成了PolyAdd(),總要給個交待吧。很快你就會看到原位運算的多項式加法在多項式運算中有多麼重要,往下看之前,請確保弄懂了上一篇的內容。
準備工作
下面將完成單連結串列的賦值運算的過載,請把這部分加到List類的public部分。的確,這部分也可以放在多項式類裡實現;但是,複製一個多項式實際上就是複製一個單連結串列,與其單單做一個多項式賦值,還不如完成單連結串列的賦值,讓派生類都能共享。
operator = (const List
{
MakeEmpty();
for (Node
}
還記得List類的private裡面的這個List(const List
List(const List
{
first = current = last = new Node
for (Node
}
終於可以這樣寫了a = b + c * d
friend Polynomial operator + (Polynomial &polyA, Polynomial &polyB)
{
Polynomial tempA = polyA;Polynomial tempB = polyB;
PolyAdd(tempA, tempB);
return tempA;
}
friend Polynomial operator * (Polynomial &polyA, Polynomial &polyB)
{
Node
Node
Polynomial polyTempA, polyTempB;
int coef, exp;
if (pA == NULL || pB == NULL) return polyTempA;
for (pA = polyA.pGetFirst()->link; pA != NULL; pA = pA->link)
{
for(pB = polyB.pGetFirst()->link; pB != NULL; pB = pB->link)
{
coef = pA->data.coef * pB->data.coef;
e= pA->data.exp + pB->data.exp;
Teterm(coef, exp);
polyTempB.LastInsert(term);
}
PolyAdd(polyTempA, polyTempB);
polyTempB.Initialize();
}
return polyTempA;
}
【後記】很顯然,在“+”的處理上我偷懶了,但這是最方便的。乘法部分只要參照手工運算,還是很簡單的,我就不解釋了。對於“-”,可以先完成(-a)這樣的演算法,然後就可以用加法完成了,而你要是象我一樣懶很可能就會做這種事-a=-1×a,真的不提倡,超低的。對於除法,如果你會用寫多位元組除法(跟手工計算很像),依樣畫葫蘆也能弄出來,但首先要完成“-”。如果要寫又得好長,留給你完成吧。到這裡你明白原位加法的重要了吧,這些運算實際上都是靠它實現的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-981201/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料結構學習(C++)——單連結串列應用(一元多項式【1】) (轉)資料結構C++
- 資料結構學習(C++)——迴圈連結串列 (轉)資料結構C++
- 資料結構學習(C++)——雙向連結串列 (轉)資料結構C++
- 資料結構學習(C++)——單連結串列(定義與實現) (轉)資料結構C++
- 學習 JS 資料結構(2):連結串列JS資料結構
- 資料結構學習(C++)——稀疏矩陣(十字連結串列【2】) (轉)資料結構C++矩陣
- 資料結構學習--連結串列資料結構
- 實戰資料結構(9)_單連結串列實現多項式的相乘資料結構
- 資料結構 - 單連結串列 C++ 實現資料結構C++
- 【資料結構】實現單連結串列(c++)資料結構C++
- 資料結構-單連結串列、雙連結串列資料結構
- 資料結構學習(C++)——棧應用(表示式求值) (轉)資料結構C++
- 資料結構——單連結串列的C++實現資料結構C++
- 學習 JavaScript 資料結構(二)——連結串列JavaScript資料結構
- 資料結構學習(C++)——稀疏矩陣(十字連結串列【1】) (轉)資料結構C++矩陣
- 資料結構練習題(順序表和單連結串列)C++資料結構C++
- 資料結構04——單連結串列資料結構
- 資料結構之單連結串列資料結構
- 資料結構實驗:連結串列的應用資料結構
- 資料結構學習(C++)——線性鏈式結構總結(代後記)【2】 (轉)資料結構C++
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- 單連結串列學習
- 前端資料結構(3)之連結串列及其應用前端資料結構
- 資料結構學習(C++)——遞迴【2】(2) (轉)資料結構C++遞迴
- 資料結構-2.單向連結串列的實現資料結構
- 【資料結構與演算法學習】線性表(順序表、單連結串列、雙向連結串列、迴圈連結串列)資料結構演算法
- C++資料結構連結串列的基本操作C++資料結構
- 【資料結構】雙迴圈連結串列(c++)資料結構C++
- 用單連結串列實現多項式加,減,乘,簡單微分
- 資料結構-連結串列資料結構
- 資料結構 - 連結串列資料結構
- 連結串列-資料結構資料結構
- 資料結構--連結串列資料結構
- 資料結構—連結串列資料結構
- 資料結構實驗之連結串列五:單連結串列的拆分資料結構
- 資料結構之連結串列篇(單連結串列的常見操作)資料結構
- 【資料結構】連結串列(單連結串列實現+詳解+原碼)資料結構
- 資料結構和演算法——Go實現單連結串列並且反轉單連結串列資料結構演算法Go