




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、西安郵電大學(xué)數(shù)據(jù)結(jié)構(gòu)設(shè)計報告題目:多項式相乘院系名稱:計算機學(xué)院專業(yè)名稱:軟件工1班級: 學(xué)生姓名:學(xué)號(8位):指導(dǎo)教師:設(shè)計起止時間:1 .設(shè)計目的以動態(tài)單鏈表為存儲結(jié)構(gòu),使用排序等操作實現(xiàn)多項式的乘法運算2 .設(shè)計內(nèi)容用一個單鏈表來表示一個一元多項式;在創(chuàng)建多項式的過程中, 可以按指數(shù)的任意順序輸入,并且可在同一多項式中輸入指數(shù)相同的多個項;在進行乘法操作之前, 輸出參與操作的兩個多項式。 要求輸出的多項式按指數(shù)升序排列,同指數(shù)的多項合并,項數(shù)的正負號顯示合理。對已排序且合并了同指數(shù)項的兩個多項式實現(xiàn)乘法操作,并輸出結(jié)果;結(jié)果多項式要求以動態(tài)鏈表為存儲結(jié)構(gòu),復(fù)用原多項式的結(jié)點空間;輸出結(jié)
2、果多項式要求按指數(shù)升序排列,同指數(shù)的多項要合并,項數(shù)的正負號要求顯示合理。3 .概要設(shè)計1 .功能模塊圖;2 .各個模塊詳細的功能描述多項式鏈表升序排序函數(shù)PolylistPolysort(Polylisthead)根據(jù)幕次的高低排序的同時并合同類項,幕次相同的系數(shù)相加存入前項,釋放合并項中后者空間,若系數(shù)相加和為 0則釋放兩項空間。多項式創(chuàng)建函數(shù)Polylistcreat()多項式相乘函數(shù)PolylistPolymul(PolylistLA,PolylistLB)輸出函數(shù)voidprint(Polylisthead)分三種情況:系數(shù)輸出、符號輸出、指數(shù)輸出四.詳細設(shè)計1.各功能函數(shù)的數(shù)據(jù)流程
3、圖(1)多項式鏈表升序排序函數(shù) PolylistPolysort(Polylisthead) Polynode*first,*move,*p,*q;/first移動指針 move被移動項指針 p,q臨時指針q=head; p=head->next; if(p=NULL)returnhead;/判斷鏈表是否為空;first=p->next; p->next=NULL; move=first; while(move!=NULL)/直接插入排序(鏈表排序) first=first->next; if(p->exp=move->exp)/判斷待插入項指數(shù)是否與首項相
4、等; p->coef+=move->coef;系數(shù)相加;free(move);/ 釋放空間;if(p->coef=0)/ 若系數(shù)相加和為0; q->next=p->next; free(p); /釋放空間; elseif(p->exp>move->exp)/判斷待插入項指數(shù)是否大于第一個項的指數(shù);head->next=move; move->next=p; elseif(p->next=NULL)/判斷下一項是否為空; p->next=move;move->next=NULL;else/待插入項指數(shù)插入位置在首末項之
5、間; q=p;/移動臨時變量指針 p,qp=p->next; while if(p->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; i
6、f(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; returnhead;/ 返回頭結(jié)點; (2)多項式創(chuàng)建函數(shù) Polylistcreat() Polynode*head,*p,*newnode;/head :頭指針newnode:新結(jié)點指針 p:臨時指針變量intc,e;/ceof(系數(shù))和 exp (指數(shù));head=(P
7、olynode*)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) scanf("%d%d",&c,&e);continue;/ 若 c 為 0,不開辟新結(jié)點; newnode=(Polynode*)malloc(sizeof(Polynode);/開辟個新結(jié)點;newnode
8、->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 排序函數(shù)對多項式鏈表進行降序排序; returnhead; / 返回頭結(jié)點; (3)多項式相乘函數(shù) PolylistPolymul(PolylistLA,PolylistLB) Polynode*head,*p,*q,*t,*newnod
9、e;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*)malloc(sizeof(Polynode);/開辟個新結(jié)點;t->next=newnode; t=t->next; t->coef=p->coef*q->coef;/項之系數(shù)為LA,
10、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ù)對多項式鏈表進行降序排序; returnhead;/返回頭結(jié)點; (4)輸出函數(shù) voidprint(Polylisthead) Polynode*p;p=head->next;if(p=NU
11、LL)printf("0");elsewhile(p!=NULL)/系數(shù)輸出if(p->coef=-1)printf("-");elseif(p->coef!=1)printf("%d",p->coef);/符號輸出if(p->exp!=0&&p->exp!=1)printf("XA");elseif(p->exp=1)printf("X");/指數(shù)輸出if(p->exp=0&&(p->coef=-1|p->c
12、oef=1)printf("1");if(p->exp<0)printf("(%d)",p->exp);elseif(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ù)字,
13、則無法處理,如:a2程序無法繼續(xù)運行六.調(diào)試情況,設(shè)計技巧及體會1 .改進方案多項式相成這個程序缺少對異常的處理,如果用戶輸入一些異常的字符程序?qū)o法繼續(xù)運 行,甚至導(dǎo)致死機。改進:加入異常處理,將各種用戶可能的輸入都包含在內(nèi)。2 .體會心得體會:此程序是使用鏈表完成的,一直以來比較習(xí)慣用順序表,通過這個程序加深了對 鏈表的理解。程序的排序部分較為復(fù)雜,根據(jù)哥次的高低排序的同時并合了同類項,哥次相同的系數(shù)相加存入前項,釋放合并項中后者空間,若系數(shù)相加和為。則釋放兩項空間。其實 想這段算法時很容易,真正實現(xiàn)卻是相當(dāng)不容易,可能是平時寫的代碼太少,真正把思想轉(zhuǎn)換成代碼困難還是比較大。七.參考文獻C
14、語言程序設(shè)計王曙燕主編科學(xué)出版社數(shù)據(jù)結(jié)構(gòu)一一C語言描述耿國華高等教育出版社 數(shù)據(jù)結(jié)構(gòu)嚴(yán)蔚敏清華大學(xué)出版社八.附錄:#include<stdio.h>#include<stdlib.h> #include<malloc.h> typedefstructPolynode intcoef;/ 系數(shù) intexp;/ 指數(shù) structPolynode*next; Polynode,*Polylist; /多項式鏈表升序排序 PolylistPolysort(Polylisthead) Polynode*first,*move,*p,*q;/first移動指針變量m
15、ove被移動項指針變量 p,q臨時指針變量 q=head; p=head->next; if(p=NULL)returnhead;/判斷鏈表是否為空;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);/ 釋放空間;if(p->coef=0)/若系數(shù)相加和為0;
16、q->next=p->next;free(p);/釋放空間;elseif(p->exp>move->exp)/判斷待插入項指數(shù)是否大于第一個項的指數(shù);head->next=move;move->next=p;elseif(p->next=NULL)/判斷下一項是否為空;p->next=move;move->next=NULL; else/待插入項指數(shù)插入位置在首末項之間;q=p;p=p->next; while(1) /移動臨時變量指針p,qif(p->exp=move->exp)/判斷待插入項指數(shù)是否與首項相等;p
17、->coef+=move->coef; free(move);/if(p->coef=0) 系數(shù)相加;釋放空間;q->next=p->next; free(p);break;/若系數(shù)相加和為 0;釋放空間;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=p->next;/移
18、動臨時變量指針p,q ;p=head->next; 使p,q指針重新指到初始化位置;q=head;move=first;returnhead;/返回頭結(jié)點;/多項式創(chuàng)建(頭插法)Polylistcreat() Polynode*head,*p,*newnode; /head :頭指針 newnode:新結(jié)點指針 p:臨時指針變量 intc,e;/ceof(系數(shù))和 exp (指數(shù));head=(Polynode*)malloc(sizeof(Polynode);/開辟一個新結(jié)點,并使之成為頭結(jié)點;p=head; printf("nt請輸入多項式中元素的系數(shù)和指數(shù):n"
19、);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("%d%d",&c,&
20、;e);/輸入新結(jié)點的系數(shù)和指數(shù); p->next=NULL;/為最后的結(jié)點的 next賦空; head=Polysort(head);/ 調(diào)用Polysort 排序函數(shù)對多項式鏈表進行降序排序; returnhead; / 返回頭結(jié)點; /多項式相乘 PolylistPolymul(PolylistLA,PolylistLB) Polynode*head,*p,*q,*t,*newnode;head:頭指針 newnode:新結(jié)點指針 p,q,t :臨時指針變量; p=LA->next; q=LB->next; head=(Polynode*)malloc(sizeof(P
21、olynode);/開辟一個新結(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->next;/p 指針移動; q=LB->n
22、ext;/q 指針復(fù)位為 LB->next ; t->next=NULL;/ 為最后的結(jié)點的 next賦空; head=Polysort(head);/ 調(diào)用Polysort 排序函數(shù)對多項式鏈表進行降序排序;returnhead;/返回頭結(jié)點;/輸出函數(shù)voidprint(Polylisthead)Polynode*p;p=head->next;if(p=NULL) printf("0"); else while(p!=NULL) /系數(shù)輸出 if(p->coef=-1) printf("-");elseif(p->coef!=1) printf(&q
溫馨提示
- 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 尚品宅配全屋定制合同模板
- 肇慶市實驗中學(xué)高三上學(xué)期語文高效課堂教學(xué)設(shè)計:詩歌鑒賞(學(xué)案)
- 新疆司法警官職業(yè)學(xué)院《少兒趣味田徑》2023-2024學(xué)年第二學(xué)期期末試卷
- 石家莊信息工程職業(yè)學(xué)院《擒拿與格斗》2023-2024學(xué)年第一學(xué)期期末試卷
- 連鎖酒店股份制投資入股合同
- 咸陽職業(yè)技術(shù)學(xué)院《企業(yè)級前端應(yīng)用開發(fā)實踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 江南大學(xué)《新媒體與社會變遷》2023-2024學(xué)年第二學(xué)期期末試卷
- 長江大學(xué)《信息論與編碼》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧傳媒學(xué)院《西醫(yī)兒科學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 開封文化藝術(shù)職業(yè)學(xué)院《計算機輔助模具設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 告訴我地址 -從IPv4到IPv6的傳奇 課件 2024-2025學(xué)年清華大學(xué)版(2024)B版初中信息技術(shù)七年級上冊
- 2024旋翼無人機巡檢作業(yè)規(guī)范
- 醫(yī)學(xué)教程 《急性闌尾炎幻燈》
- 重型貨車整車運輸協(xié)議樣本
- 讀后續(xù)寫-期中真題匯編(原卷版)
- (部編版)統(tǒng)編版小學(xué)語文教材目錄(一至六年級上冊下冊齊全)
- 允許孩子犯錯課件
- 項目建筑智能化工程施工招標(biāo)文件模板
- 110kv線路施工方案
- 大東鞋業(yè)合同協(xié)議書
- 用所給詞的適當(dāng)形式填空(專項訓(xùn)練)人教PEP版英語六年級上冊
評論
0/150
提交評論