之前自己看書學鍊錶、棧、佇列,覺得比較難懂,還是得自己動手實踐下。這次就是實現乙個多項式的加法和乘法運算,主要是要求熟練鍊錶的各種操作。
看看程式的大體框架是:
設計資料結構:多項式的表示。可以用陣列和鍊錶。陣列需事先確定陣列大小,鍊錶則對動態操作比較有利。
讀多項式:這裡需要設計乙個attach函式,是用來將新的結點插入鏈尾的。
加法實現:多項式相加其實就是比較指數,相同則合併同類項,不同則直接插入到結果鍊錶。
乘法實現:乘法實現比較複雜。大致的思路就是其中乙個多項式的每一項與另乙個多項式的每一項相乘。可以先將p1的第一項與p2的各項相乘得到乙個初始的p,然後再雙重迴圈p1
p2
,係數相乘指數相加,再插入到初始鍊錶的適當位置。由於原來的鍊錶是按指數遞減排列的,只要比較指數大小就可以找到適當的插入位置的。當然其中還有很多細節問題需注意。
多項式輸出:輸出用迴圈,鍊錶指標依次後移就行。
**實現:
#include
#include
#include
typedef int type;
typedef struct polynode *polynomial;
struct polynode ;
//多項式讀入函式
void attach(type e, type c, polynomial *ptrrear)
polynomial readploy()
//刪除臨時生成的頭節點
t = p;
p = p->
link;
free(t);
return p;
}polynomial add(polynomial p1, polynomial p2) else
if (t1->expo > t2->expo) else
} while (t1)
while (t2)
return p;
}polynomial multi(polynomial p1, polynomial p2)
t1 = t1->
link;
//讓p1的第一項後的所有項分別與p2相乘
while (t1)
} else
}t2 = t2->
link;
}t1 = t1->
link;
} t2 = p;
p = p->
link;
free(t2);
return p;
}void printpoly(polynomial p)
while (p)
}int main()
**實現的過程中有很多細枝末節需要注意: 資料結構學習 多項式相加
多項式相加 include include typedef struct lnodelnode typedef struct lnode linklist void createlist l linklist l void initlist l linklist l void createlist ...
資料結構筆記 多項式加法運算
乙個多項式如果使用資料結構儲存在計算機中,有以下兩種表示方法 1 使用n 2長度的一維陣列來存放,陣列的第乙個位置儲存最大指數n項的係數其他位置按照指數n遞減,按序儲存對應項數 p n,an,an 1,a1,a0 例如p x 2x 5 3x 4 5x 2 4x 1轉換為陣列a,a 5,2,3,0,5...
資料結構 鍊錶 多項式加法
問題描述 用單鏈表儲存一元多項式,並實現兩個多項式的加法。可以看出,這種方案適合對某些多項式的處理。但是,在處理一些次數高但項數少的多項式時,存在浪費空間的現象,會有很多閒置的0。可以使用如下定義的單鏈表結構儲存多項式 鍊錶中的每乙個結點是多項式中的一項,結點的資料域包括指數和係數兩部分,由指標域連...