版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、.西安郵電大學(xué)數(shù)據(jù)結(jié)構(gòu)設(shè)計報告題 目: 多項式相乘院系名稱: 計算機學(xué)院 專業(yè)名稱: 軟件工程班 級: 學(xué)生姓名: 學(xué)號(8位): 指導(dǎo)教師: 設(shè)計起止時間:. .一. 設(shè)計目的以動態(tài)單鏈表為存儲結(jié)構(gòu),使用排序等操作實現(xiàn)多項式的乘法運算二. 設(shè)計內(nèi)容用一個單鏈表來表示一個一元多項式;在創(chuàng)建多項式的過程中,可以按指數(shù)的任意順序輸入,并且可在同一多項式中輸入指數(shù)相同的多個項;在進行乘法操作之前,輸出參與操作的兩個多項式。要求輸出的多項式按指數(shù)升序排列,同指數(shù)的多項合并,項數(shù)的正負號顯示合理。 對已排序且合并了同指數(shù)項的兩個多項式實現(xiàn)乘法操作,并輸出結(jié)果;結(jié)果多項式要求以動態(tài)鏈表為存儲結(jié)構(gòu),復(fù)用原多
2、項式的結(jié)點空間;輸出結(jié)果多項式要求按指數(shù)升序排列,同指數(shù)的多項要合并,項數(shù)的正負號要求顯示合理。三概要設(shè)計主函數(shù)main()1功能模塊圖;創(chuàng)建多項式LB=creat()創(chuàng)建多項式LA=creat()調(diào)用Polysort( )排序調(diào)用print()輸出LB調(diào)用Polysort( )排序調(diào)用print()輸出LA對多項式LA,LB相乘LC=Polymul(LA,LB)調(diào)用Polysort( )排序 調(diào)用print()輸出LC2各個模塊詳細的功能描述。多項式鏈表升序排序函數(shù)Polylist Polysort(Polylist head)根據(jù)冪次的高低排序的同時并合同類項,冪次相同的系數(shù)相加存入前項,
3、釋放合并項中后者空間,若系數(shù)相加和為0則釋放兩項空間。多項式創(chuàng)建函數(shù)Polylist creat()多項式相乘函數(shù)Polylist Polymul(Polylist LA,Polylist LB)輸出函數(shù)void print(Polylist head)分三種情況:系數(shù)輸出、符號輸出、指數(shù)輸出四詳細設(shè)計1.各功能函數(shù)的數(shù)據(jù)流程圖Polysort()開始head=NULL?first=p->next; p->next=NULL; move=first; Yp->exp= =move->expp->exp= =move->exp N N yp->coef+
4、=move->coef; free(move);p->next= =NULL yhead->next=move; move->next=p; p->coef= =0 yhead->next=move; move->next=p; q=p;p=p->next;q->next=p->next;free(p); yWhile(1)p=head->next; q=head;move=first;return head結(jié)束2重點設(shè)計及編碼(1)多項式鏈表升序排序函數(shù)Polylist Polysort(Polylist head)Polyn
5、ode *first,*move,*p,*q; /first移動指針 move 被移動項指針p,q臨時指針q=head; p=head->next;if(p=NULL) return head; /判斷鏈表是否為空;first=p->next;p->next=NULL;move=first;while(move!=NULL) /直接插入排序(鏈表排序)first=first->next; if(p->exp=move->exp) /判斷待插入項指數(shù)是否與首項相等;p->coef+=move->coef; /系數(shù)相加;free(move); /釋放
6、空間;if(p->coef=0) /若系數(shù)相加和為0;q->next=p->next;free(p); /釋放空間;else if(p->exp>move->exp) /判斷待插入項指數(shù)是否大于第一個項的指數(shù);head->next=move;move->next=p;else if(p->next=NULL) /判斷下一項是否為空;p->next=move;move->next=NULL;else /待插入項指數(shù)插入位置在首末項之間; q=p; /移動臨時變量指針p,qp=p->next;while(1)if(p->
7、exp=move->exp) /判斷待插入項指數(shù)是否與首項相等;p->coef+=move->coef;/系數(shù)相加;free(move);/釋放空間;if(p->coef=0)q->next=p->next;/若系數(shù)相加和為0;free(p);/釋放空間;break;if(p->exp>move->exp) /判斷待插入項指數(shù)是否大于當(dāng)前項的指數(shù);q->next=move;move->next=p;break;if(p->next=NULL) /判斷下一項是否為空;p->next=move;move->next
8、=NULL;break;q=p; /移動臨時變量指針p,q;p=p->next;p=head->next; /使p,q指針重新指到初始化位置;q=head;move=first;return head; /返回頭結(jié)點;(2)多項式創(chuàng)建函數(shù)Polylist creat()Polynode *head,*p,*newnode;/head:頭指針 newnode:新結(jié)點指針 p:臨時指針變量int c,e; /ceof(系數(shù))和exp(指數(shù));head=(Polynode *)malloc(sizeof(Polynode);/開辟一個新結(jié)點,并使之成為頭結(jié)點;p=head;printf(
9、"nt請輸入多項式中元素的系數(shù)和指數(shù):n");scanf("%d %d",&c,&e);while(c|e) /ceof(系數(shù))和exp(指數(shù))不全為0;if(c=0) scanf("%d %d",&c,&e);continue;/若c為0,不開辟新結(jié)點;newnode=(Polynode *)malloc(sizeof(Polynode);/開辟一個新結(jié)點;newnode->coef=c;newnode->exp=e;p->next=newnode;p=newnode;scanf(&
10、quot;%d %d",&c,&e);/輸入新結(jié)點的系數(shù)和指數(shù);p->next=NULL; /為最后的結(jié)點的next賦空;head=Polysort(head); /調(diào)用Polysort排序函數(shù)對多項式鏈表進行降序排序;return head; /返回頭結(jié)點;(3)多項式相乘函數(shù)Polylist Polymul(Polylist LA,Polylist LB)Polynode *head,*p,*q,*t,*newnode; /head:頭指針 newnode:新結(jié)點指針 p,q,t:臨時指針變量;p=LA->next;q=LB->next;head
11、=(Polynode *)malloc(sizeof(Polynode);/開辟一個新結(jié)點,并使之成為新鏈表的頭結(jié)點;t=head;while(p!=NULL)while(q!=NULL)newnode=(Polynode *)malloc(sizeof(Polynode);/開辟一個新結(jié)點;t->next=newnode;t=t->next;t->coef=p->coef*q->coef; /項之系數(shù)為LA,LB兩項系數(shù)之積;t->exp=p->exp+q->exp; /項之指數(shù)為LA,LB兩項指數(shù)之和;q=q->next;p=p->
12、;next; /p指針移動;q=LB->next; /q指針復(fù)位為LB->next;t->next=NULL; /為最后的結(jié)點的next賦空;head=Polysort(head); /調(diào)用Polysort排序函數(shù)對多項式鏈表進行降序排序;return head; /返回頭結(jié)點;(4)輸出函數(shù)void print(Polylist head)Polynode *p;p=head->next;if(p=NULL) printf("0");else while(p!=NULL) /系數(shù)輸出if(p->coef=-1) printf("-&
13、quot;);else if(p->coef!=1) printf("%d",p->coef);/符號輸出if(p->exp!=0&&p->exp!=1) printf("X");else if(p->exp=1) printf("X");/指數(shù)輸出if(p->exp=0&&(p->coef=-1|p->coef=1) printf("1");if(p->exp<0) printf("(%d)",p-&g
14、t;exp);else if(p->exp!=1&&p->exp!=0)printf("%d",p->exp); p=p->next;if(p!=NULL&&p->coef>0) printf("+"); printf("n");五測試數(shù)據(jù)及運行結(jié)果1正常測試數(shù)據(jù)和運行結(jié)果2異常測試數(shù)據(jù)及運行結(jié)果如輸入的字符不是數(shù)字,則無法處理,如:a 2 程序無法繼續(xù)運行六調(diào)試情況,設(shè)計技巧及體會1改進方案多項式相成這個程序缺少對異常的處理,如果用戶輸入一些異常的字符程序?qū)o法繼續(xù)
15、運行,甚至導(dǎo)致死機。改進:加入異常處理,將各種用戶可能的輸入都包含在內(nèi)。2體會心得體會:此程序是使用鏈表完成的,一直以來比較習(xí)慣用順序表,通過這個程序加深了對鏈表的理解。程序的排序部分較為復(fù)雜,根據(jù)冪次的高低排序的同時并合了同類項,冪次相同的系數(shù)相加存入前項,釋放合并項中后者空間,若系數(shù)相加和為0則釋放兩項空間。其實想這段算法時很容易,真正實現(xiàn)卻是相當(dāng)不容易,可能是平時寫的代碼太少,真正把思想轉(zhuǎn)換成代碼困難還是比較大。七參考文獻C語言程序設(shè)計 王曙燕主編 科學(xué)出版社數(shù)據(jù)結(jié)構(gòu)C語言描述 耿國華 高等教育出版社數(shù)據(jù)結(jié)構(gòu) 嚴蔚敏 清華大學(xué)出版社八附錄:#include<stdio.h>#
16、include<stdlib.h>#include<malloc.h>typedef struct Polynodeint coef;/系數(shù)int exp;/指數(shù)struct Polynode *next;Polynode,*Polylist;/多項式鏈表升序排序Polylist Polysort(Polylist head)Polynode *first,*move,*p,*q; /first移動指針變量 move 被移動項指針變量p,q臨時指針變量q=head; p=head->next;if(p=NULL) return head; /判斷鏈表是否為空;fi
17、rst=p->next;p->next=NULL;move=first;while(move!=NULL) /直接插入排序(鏈表排序)first=first->next; if(p->exp=move->exp) /判斷待插入項指數(shù)是否與首項相等;p->coef+=move->coef; /系數(shù)相加;free(move); /釋放空間;if(p->coef=0) /若系數(shù)相加和為0;q->next=p->next;free(p); /釋放空間;else if(p->exp>move->exp) /判斷待插入項指數(shù)是否
18、大于第一個項的指數(shù);head->next=move;move->next=p;else if(p->next=NULL) /判斷下一項是否為空;p->next=move;move->next=NULL;else /待插入項指數(shù)插入位置在首末項之間; q=p; /移動臨時變量指針p,qp=p->next;while(1)if(p->exp=move->exp) /判斷待插入項指數(shù)是否與首項相等;p->coef+=move->coef;/系數(shù)相加;free(move);/釋放空間;if(p->coef=0)q->next=p-
19、>next;/若系數(shù)相加和為0;free(p);/釋放空間;break;if(p->exp>move->exp) /判斷待插入項指數(shù)是否大于當(dāng)前項的指數(shù);q->next=move;move->next=p;break;if(p->next=NULL) /判斷下一項是否為空;p->next=move;move->next=NULL;break;q=p; /移動臨時變量指針p,q;p=p->next;p=head->next; /使p,q指針重新指到初始化位置;q=head;move=first;return head; /返回頭結(jié)
20、點;/多項式創(chuàng)建(頭插法)Polylist creat()Polynode *head,*p,*newnode;/head:頭指針 newnode:新結(jié)點指針 p:臨時指針變量int c,e; /ceof(系數(shù))和exp(指數(shù));head=(Polynode *)malloc(sizeof(Polynode);/開辟一個新結(jié)點,并使之成為頭結(jié)點;p=head;printf("nt請輸入多項式中元素的系數(shù)和指數(shù):n");scanf("%d %d",&c,&e);while(c|e) /ceof(系數(shù))和exp(指數(shù))不全為0;if(c=0)
21、 scanf("%d %d",&c,&e);continue;/若c為0,不開辟新結(jié)點;newnode=(Polynode *)malloc(sizeof(Polynode);/開辟一個新結(jié)點;newnode->coef=c;newnode->exp=e;p->next=newnode;p=newnode;scanf("%d %d",&c,&e);/輸入新結(jié)點的系數(shù)和指數(shù);p->next=NULL; /為最后的結(jié)點的next賦空;head=Polysort(head); /調(diào)用Polysort排序函
22、數(shù)對多項式鏈表進行降序排序;return head; /返回頭結(jié)點;/多項式相乘Polylist Polymul(Polylist LA,Polylist LB)Polynode *head,*p,*q,*t,*newnode; /head:頭指針 newnode:新結(jié)點指針 p,q,t:臨時指針變量;p=LA->next;q=LB->next;head=(Polynode *)malloc(sizeof(Polynode);/開辟一個新結(jié)點,并使之成為新鏈表的頭結(jié)點;t=head;while(p!=NULL)while(q!=NULL)newnode=(Polynode *)ma
23、lloc(sizeof(Polynode);/開辟一個新結(jié)點;t->next=newnode;t=t->next;t->coef=p->coef*q->coef; /項之系數(shù)為LA,LB兩項系數(shù)之積;t->exp=p->exp+q->exp; /項之指數(shù)為LA,LB兩項指數(shù)之和;q=q->next;p=p->next; /p指針移動;q=LB->next; /q指針復(fù)位為LB->next;t->next=NULL; /為最后的結(jié)點的next賦空;head=Polysort(head); /調(diào)用Polysort排序函數(shù)
24、對多項式鏈表進行降序排序;return head; /返回頭結(jié)點;/輸出函數(shù)void print(Polylist head)Polynode *p;p=head->next;if(p=NULL) printf("0");else while(p!=NULL) /系數(shù)輸出if(p->coef=-1) printf("-");else if(p->coef!=1) printf("%d",p->coef);/符號輸出if(p->exp!=0&&p->exp!=1) printf("X");else if(p->exp=1) printf("X");/指數(shù)輸出if(p->exp=0&&(p->coef=-1|p->coef=1) prin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個人房屋租賃擔(dān)保合同模板4篇
- 2024蘋果加工副產(chǎn)品深加工技術(shù)研發(fā)合同3篇
- 2025年度彩色激光打印機租賃及升級服務(wù)合同模板3篇
- 雪人的創(chuàng)意課程設(shè)計
- 年度雕刻雕銑設(shè)備控制系統(tǒng)競爭策略分析報告
- 2025年獼猴桃種植技術(shù)培訓(xùn)土地租賃與農(nóng)民增收合同4篇
- 2025年度個人二手房交易合同模板環(huán)保裝修服務(wù)版3篇
- 2025年離婚風(fēng)險防范:協(xié)議離婚與訴訟離婚適用條件合同3篇
- 二零二五年度苗木出口業(yè)務(wù)代理銷售合同4篇
- 二零二五版智能門窗控制系統(tǒng)集成與安裝服務(wù)合同4篇
- 醫(yī)院三基考核試題(康復(fù)理療科)
- 2024-2030年中國招標(biāo)代理行業(yè)深度分析及發(fā)展前景與發(fā)展戰(zhàn)略研究報告
- 醫(yī)師定期考核 (公共衛(wèi)生)試題庫500題(含答案)
- 基因突變和基因重組(第1課時)高一下學(xué)期生物人教版(2019)必修2
- 內(nèi)科學(xué)(醫(yī)學(xué)高級):風(fēng)濕性疾病試題及答案(強化練習(xí))
- 音樂劇好看智慧樹知到期末考試答案2024年
- 辦公設(shè)備(電腦、一體機、投影機等)采購 投標(biāo)方案(技術(shù)方案)
- 案卷評查培訓(xùn)課件模板
- 2024年江蘇省樣卷五年級數(shù)學(xué)上冊期末試卷及答案
- 人教版初中英語七八九全部單詞(打印版)
- 波浪理論要點圖解完美版
評論
0/150
提交評論