問題及**:
/*
*檔名稱:多項式求和.cpp
*作 者:杜文文
*完成日期:2023年 10月 11日
*問題描述:用單鏈表儲存一元多項式,並實現兩個多項式的加法。
1、儲存多項式的資料結構
多項式的通式是p n (x)=a n x n +a n−1 x n−1 +...+a 1 x+a 0 。n次多項式共有n+1項。直觀地,可以定義乙個陣列來儲存這n+1個係數。以多項式p(x)=−3.4x 10 −9.6x 8 +7.2x 2 +x 為例,儲存這個多項式的陣列如下圖:
這裡寫描述
可以看出,這種方案適合對某些多項式的處理。但是,在處理一些次數高但項數少的多項式時,存在浪費空間的現象,會有很多閒置的0。
可以使用如下定義的單鏈表結構儲存多項式:鍊錶中的每乙個結點是多項式中的一項,結點的資料域包括指數和係數兩部分,由指標域連線起多項式中的各項。
typedef struct pnode //定義單鏈表結點型別,儲存多項式中的一項,鍊錶構成多項式 polynode;
用於表示多項式的鍊錶將如下圖所示,在建立多項式的鍊錶時,已經令結點按指數由大到小的順序排列。
這裡寫描述
*輸入描述:若干數字
*程式輸出: 原多項式,有序多項式及多項式加法的結果
*/
#include #include #define max 20 //多項式最多項數
typedef struct //定義存放多項式的陣列型別
polyarray;
typedef struct pnode //定義單鏈表結點型別,儲存多項式中的一項,鍊錶構成多項式
polynode;
void disppoly(polynode *l) //輸出多項式
printf("\n");
}void destroylist(polynode *&l) //銷毀單鏈表
free(p);
}void createlistr(polynode *&l, polyarray a, int n) //尾插法建表
r->next=null; //終端結點next域置為null
}void sort(polynode *&head) //按exp域遞減排序
}}void add(polynode *ha,polynode *hb,polynode *&hc) //求兩有序集合的並,完成加法
else if (pa->expexp)
else //pa->exp=pb->exp
pa=pa->next;
pb=pb->next;}}
if (pb!=null) pa=pb; //複製餘下的結點
while (pa!=null)
tc->next=null;
}int main()
,,,};
polyarray b= ,,,,};
createlistr(ha,a,4);
createlistr(hb,b,5);
printf("原多項式a: ");
disppoly(ha);
printf("原多項式b: ");
disppoly(hb);
sort(ha);
sort(hb);
printf("有序多項式a: ");
disppoly(ha);
printf("有序多項式b: ");
disppoly(hb);
add(ha,hb,hc);
printf("多項式相加: ");
disppoly(hc);
destroylist(ha);
destroylist(hb);
destroylist(hc);
return 0;
}
執行結果:
第四周專案6 多項式求和
檔名稱 test.cpp 完成日期 2015年10月12日 版本號 vc 6.0 問題描述 用單鏈表儲存一元多項式,並實現兩個多項式的加法。include include define max 20 多項式最多項數 typedef struct 定義存放多項式的陣列型別 polyarray type...
第四周專案6 多項式求和
煙台大學計算機與控制工程學院 問題描述 用單鏈表儲存一元多項式,並實現兩個多項式的加法 輸入描述 無 輸出描述 include include define max 20 多項式最多項數 typedef struct 定義存放多項式的陣列型別 polyarray typedef struct pno...
第四周 專案6 多項式求和
檔名稱 test.cpp 完成日期 2015年10月12日 問題描述 多項式求和 執行程式 include include define max 20 多項式最多項數 typedef struct 定義存放多項式的陣列型別 polyarray typedef struct pnode 定義單鏈表結點...