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 退出根據所選功能的不同,輸入格式要求如下所示 第乙個資...