資料結構 一元多項式

2021-08-08 04:12:13 字數 3557 閱讀 3096

void initlist(polynode &l) /初始化多項式單鏈表*/

int getlength(polynode*l) /求多項式單鏈表的長度/

polynode getelem(polynode *l,int i) /返回多項式單鏈表中第i個結點的指標*/

polynode locate(polynode *l,float c,inte) /在多項式單鏈表中按值查詢*/

int inselem(polynode &l,float c,inte,int i) /在多項式單鏈表中插入乙個結點*/

int delelem(polynode l,int i) /在多項式單鏈表中刪除乙個結點*/

void displist(polynode l) /輸出多項式單鏈表的元素值*/

void creapolylist(polynode &l,floatc,int e,int n) /建立乙個鍊錶 */

void sortploy(polynode &l) /對l的多項式單鏈表按expn域遞增排序*/

polynode addpoly(polynode *pa,polynode*pb) /兩個多項式單鏈表合併*/

2、以單鏈表作為儲存結構插入多項式:多項式按冪從高到低,以「係數,冪」的格式輸入,並以「0,0」結束。

3、多項式相加,單鏈表合併 :

1)兩個多項式對應的單鏈表頭節點開始,依次掃瞄各節點;

2)若兩表的節點均非空:比較二者的冪,按冪大者先入表。如果冪相等,則係數相加再入錶;

3) 若有一鍊錶已空,則將非空鍊錶插入新錶;

4) 輸出合併後的鍊錶;

5) 主函式呼叫,完成多項式相加。

一.一元多項式加法:

1.建立多項式:尾插法建立一元多項式的鍊錶,通過鍵盤輸入多項式的係數和指數,以輸入係數0為結束標誌,並約定建立一元多項式鍊錶時,總是按指數從小到大的順序排列。

2.輸出多項式:從單鏈表的第一項開始逐項讀出係數和指數,按多項式的形式輸出。

3.多項式相加:設la和lb分別表示兩個多項式。lc表示和多項式。p,q,r分別表示指向單鏈表的當前項比較指數大小。

(1)若la->expexp,則結點p應是和多項式中的一項,將p複製到r,並使p後移。

(2)若la->exp = lb->exp,則將兩個結點中的係數相加,當和不為0時,la的係數域加上lb的係數域作為lc的係數域;若和為0,則和多項式中沒有這一項,p,q後移。

(3)若la->exp > lb->exp,則將結點q複製到lc中,q後移。

二.一元多項式減法

演算法:將減數多項式的所有係數先變為相反數,然後呼叫多項式相加的函式進行運算。

三.一元多項式乘法

兩個多項式相乘,應該是第乙個多項式中的每一項分別與第二個多項式相乘,將相乘得到的結果都存在第乙個多項式中,再呼叫合併多項式的函式。我寫的多項式相乘用到了兩重迴圈,合併多項式也用到了兩重迴圈。

#include 

#include

typedef struct node

polynode;

void initlist(polynode *&l) /*初始化多項式單鏈表*/

int getlength(polynode *l) /*求多項式單鏈表的長度*/

return i;

} polynode *getelem(polynode *l,int i) /*返回多項式單鏈表中第i個結點的指標*/

return p;

} polynode *locate(polynode *l,float c,int e) /*在多項式單鏈表中按值查詢*/

int inselem(polynode *&l,float c,int e,int i) /*在多項式單鏈表中插入乙個結點*/

s->next=p->next;

p->next=s;

return

1;

} int delelem(polynode *l,int i) /*在多項式單鏈表中刪除乙個結點*/

q=p->next; /*q指向被刪結點*/

p->next=q->next; /*刪除*q結點*/

free(q);

return

1;

} void displist(polynode *l) /*輸出多項式單鏈表的元素值*/

printf("\n");

} void creapolylist(polynode *&l,float c,int e,int n)

void sortploy(polynode *&l) /*對l的多項式單鏈表按expn域遞增排序*/

else /*處理其餘結點*/

q=p->next; /*在*pre結點之後插入*p*/

p->next=pre->next;

pre->next=p;

p=q;

}

} } polynode *addpoly(polynode *pa,polynode *pb)

else

if (p1->expn>p2->expn) /*將

*p2結點複製到*s並鏈到pc尾*/

else /*p1->expn=p2->expn的情況*/

p1=p1->next;p2=p2->next;

} }

if (p1!=null) p=p1; /*將尚未掃瞄完的餘下結點複製並鏈結到pc單鏈表之後*/

else p=p2;

while (p!=null)

tc->next=null; /*新建單鏈表最後結點的next域置空*/

return pc;

} void main()

,c2=;

int e1=,e2=;

initlist(l1);

initlist(l2);

initlist(l3);

creapolylist(l1,c1,e1,4);

creapolylist(l2,c2,e2,3);

printf("**

*兩多項式相加運算**

*\n");

printf("原多項式a:\n");displist(l1);

printf("原多項式b:\n");displist(l2);

sortploy(l1);

sortploy(l2);

printf("排序後的多項式a:\n");displist(l1);

printf("排序後的多項式b:\n");displist(l2);

l3=addpoly(l1,l2);

printf("多項式相加結果:\n");displist(l3);

}

資料結構 一元多項式相加

一元多項式相加 include include struct node typedef struct node polynomial 建立帶有表頭的鍊錶 poly用於儲存係數和指數 polynomial createpoly int poly,int len return head 銷毀鍊錶 voi...

資料結構 一元多項式加法

7 17 一元多項式的加法 20 分 設計程式求兩個一元多項式的和。輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入乙個多項式非零項係數和指數。數字間以空格分隔。輸出1行,以指數遞降方式輸出和多項式非零項的係數和指數 保證不超過整數的表示範圍 數字間以空格分隔,但結尾不能有多餘空格...

(資料結構)一元多項式相加

編寫一元多項式加法運算程式。要求用線性鍊錶儲存一元多項式 參照課本 該程式有以下幾個功能 多項式求和 輸入 輸入三個多項式,建立三個多項式鍊錶pa pb pc 輸出 顯示三個輸入多項式pa pb pc 和多項式pa pb 多項式pa pb pc 退出根據所選功能的不同,輸入格式要求如下所示 第乙個資...