




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數(shù)據(jù)結構實驗報告實驗一:一元多項式相加姓 名: 周 成 學 號: 13083511 專 業(yè): 軟件工程 任 課 教 師: 馬慧珠 2013年12 月01 日1.實驗名稱:一元多項式相加2.實驗目的: 如何使用C語言實現(xiàn)鏈表的說明、創(chuàng)建以及結點的插入和刪除等操作。3.實驗要求:對一元多項式能實現(xiàn)輸入、輸出,以及兩個一元多項式相加及結果顯示。4.實驗內容:一元多項式的表示在計算機內用鏈表來實現(xiàn),同時為了節(jié)省存儲空間,只存儲其中非零的項,鏈表中的每個節(jié)點存放多項式的系數(shù)非零項。它包含三個域,分別存放多項式的系數(shù),指數(shù),以及指向下一個項的指針。根據(jù)一元多項式相加的運算規(guī)則:對于兩個一元多項式中所有指數(shù)
2、相同的項,對應系數(shù)相加,若其和不為零,則構成“和多項式”中的一項,對于兩個一元多項式中所有指數(shù)不相同的項,則分別復抄到“和多項式”中去。核心算法PolyAdd是把分別由pa和pb所指的兩個多項式相加,結果為pa所指的多項式。運算規(guī)則如下:相加時,首先設兩個指針變量qa和qb分別從多項式的首項開始掃描,比較qa和qb所指結點指數(shù)域的值,可能出現(xiàn)下列三種情況之一:(1)qa->exp大于qb->exp,則qa繼續(xù)向后掃描。(2)qa->exp等于qb->exp,則將其系數(shù)相加。若相加結果不為零,將結果放入qa->coef中,并刪除qb所指結點,否則同時刪除qa和qb所
3、指結點。然后qa、qb繼續(xù)向后掃描。(3)qa->exp小于qb->exp,則將qb所指結點插入qa所指結點之前,然后qa、qb繼續(xù)向后掃描。掃描過程一直進行到qa或qb有一個為空為止,然后將有剩余結點的鏈表接在結果表上。所得pa指向的鏈表即為兩個多項式之和。5.實驗程序代碼及運行結果:#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include<stdio.h> #define NULL 0typedef s
4、truct NODE float coef; /系¦Ì數(shù)ºy int expn; /指?數(shù)ºy struct NODE *next; NODE;NODE *Creat(int n);void print(NODE *head);NODE *AddPolyn(NODE *head1, NODE *head2);NODE *Delfirst(NODE *head, NODE *q);void InsertBefore(NODE *p1, NODE *p2);int compare(int a, int b);/*創(chuàng)ä¡ä建
5、61;§鏈¢¡ä表À¨ª*/NODE *Creat(int n) NODE *current, *previous, *head; int i; head = (NODE *)malloc(sizeof(NODE); /*創(chuàng)ä¡ä建¡§頭ª¡¤結¨¢點Ì?*/ previous = head; for(i = 0; i < n; i+) current = (NODE *)malloc(sizeof(NODE)
6、; printf("請?輸º?入¨?系¦Ì數(shù)ºy和¨ª指?數(shù)ºy : "); scanf("%f%d", ¤t->coef, ¤t->expn); previous->next = current; previous = current; previous->next = NULL; return head;/*一°?元a多¨¤項?式º?的Ì?想?加¨&
7、#174;,ê?總Á¨¹體¬?考?慮?,ê?可¨¦分¤?qa的Ì?指?數(shù)ºy比À¨¨qb小?,ê?或¨°等̨¨于®¨²pb(如¨?果?系¦Ì數(shù)ºy相¨¤加¨®等̨¨于®¨²0和¨ª不?等Ì
8、8;¨于®¨²0),或¨°大䨮于®¨²pb里¤?面?由®¨¦InsertBefore和¨ªDelfirst兩¢?個?小?模¡ê塊¨¦組Á¨¦成¨¦一°?部?分¤?*/NODE *AddPolyn(NODE *head1, NODE *head2) NODE *ha, *hb, *qa, *qb;
9、 int a, b; float sum; ha = head1; /*ha和¨ªhb指?向¨°頭ª¡¤結¨¢點Ì?*/ hb = head2; qa = ha->next; /*qa和¨ªqb指?向¨°頭ª¡¤結¨¢點Ì?的Ì?下?一°?個?結¨¢點Ì?*/ qb = hb->next; while(qa && qb)
10、 /*qa和¨ªqb均¨´非¤?空?*/ a = qa->expn; b = qb->expn; switch(compare(a, b) case -1 : /*qa->expn < qb->expn*/ ha = qa; qa = qa->next; break; case 0 : sum = qa->coef + qb->coef; /*系¦Ì數(shù)ºy的Ì?和¨ª*/ if(sum != 0.0) /*如¨?果?不?是
11、86;?0.0*/ qa->coef = sum; /*改?變À?系¦Ì數(shù)ºy*/ ha = qa; else free(Delfirst(ha, qa); free(Delfirst(hb, qb); qa = ha->next; qb = hb->next; /*qb釋º¨ª放¤?后¨®要°a重?新?賦3值¦Ì*/ break; case 1 : /*如¨?果?qa-> expn > qb -> expn*/ Del
12、first(hb, qb); InsertBefore(ha, qb); /*把ã?qb插?入¨?到Ì?ha下?一°?個?結¨¢點Ì?之?前¡ã*/ qb = hb->next; ha = ha->next; break; if(qb) ha->next = qb; /*插?入¨?剩º¡ê余®¨¤的Ì?pb*/ free(head2); return head1; /*比À¨¨較
13、?*/int compare(int a, int b) if(a < b) return -1; else if(a > b) return 1; else return 0;/*刪¦?除y結¨¢點Ì?q*/NODE *Delfirst(NODE *p1, NODE *q) p1 -> next = q -> next; return (q); /*插?入¨?結¨¢點Ì?,引°y入¨?結¨¢點Ì?p,可¨¦以°
14、?讓¨?p插?入¨?到Ì?p2和¨ªp1之?間?*/void InsertBefore(NODE *p1, NODE *p2) NODE *p; p = p1->next; p1->next = p2; p2->next = p;/*打䨰印®?,為a了¢?美¨¤觀?程¨¬序¨°分¤?開a打䨰印®?*/void print(NODE *head) NODE *cu
15、rrent; current = head->next; while(current->next != NULL) printf("%0.f * x%d + ", current->coef, current->expn); current = current -> next; printf("%0.f * x%d", current->coef, current->expn); /system(ê¡§"pause"); int main() NODE *head
16、1, *head2, *head3; int n1, n2; printf("請?輸º?入¨?你?需¨¨要°a的Ì?多¨¤項?式º?的Ì?項?數(shù)ºy n1 : "); scanf("%d", &n1); head1 = Creat(n1); printf("第̨²一°?個?多¨¤項?式º?的Ì?顯?示º? : n"); prin
17、t(head1); printf("n請?輸º?入¨?你?需¨¨要°a的Ì?多¨¤項?式º?的Ì?項?數(shù)ºy n2 : "); scanf("%d", &n2); head2 = Creat(n2); printf("n第̨²二t個?多¨¤項?式º?的Ì?顯?示º? : n"); print(head2); head3 = AddPolyn(head1, head2); printf("n合?并¡é后¨®的Ì?多¨¤項?式º?的Ì?顯?示º? : n"); print(head3); printf("n");運行結果:實驗數(shù)據(jù)1如圖:輸入一個四次二項式X3+2X4,一個五次二項式X4+2X5,輸出如圖:實驗數(shù)據(jù)2如圖:輸入一個五次四項式X2+X3+X4+X5,還有一個五次五項式1+X+X3+2X4+2X5輸出如圖所示實驗數(shù)據(jù)3如圖:輸入一個七次三項式1+2x5+3X7,還有一個五次四
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 薯類批發(fā)商市場供需分析考核試卷
- 貿易代理國際市場進入與擴張策略考核試卷
- 集成服務在智能電網(wǎng)分布式能源管理的實現(xiàn)考核試卷
- 拍賣行拍賣業(yè)務智能化發(fā)展路徑考核試卷
- 熱扎帶剛車間設計
- 麻醉科無痛技術臨床應用與發(fā)展
- 寓言故事匯報展示
- 服裝設計產(chǎn)品開發(fā)全流程
- Siphonaxanthin-生命科學試劑-MCE
- Anticonvulsant-agent-10-生命科學試劑-MCE
- 乒乓球培訓協(xié)議書
- 無創(chuàng)呼吸機使用培訓
- 園林植物病理學實習
- Animate動畫設計實例教程高職全套教學課件
- DB22-T+3541-2023日間手術中心護理質量安全管理規(guī)范
- 小學六年級畢業(yè)動員會 課件( 26張ppt)
- 流體力學-大連理工大學中國大學mooc課后章節(jié)答案期末考試題庫2023年
- 2023年度湖南省自然科學獎項目公示材料
- 2023-2024學年江蘇省江都市小學語文三年級期末高分測試題詳細參考答案解析
- 產(chǎn)時子癇應急演練文檔
- 操作規(guī)程儲氣罐安全操作規(guī)程
評論
0/150
提交評論