數(shù)據(jù)結(jié)構(gòu)-試驗一-一元多項式相加_第1頁
數(shù)據(jù)結(jié)構(gòu)-試驗一-一元多項式相加_第2頁
數(shù)據(jù)結(jié)構(gòu)-試驗一-一元多項式相加_第3頁
數(shù)據(jù)結(jié)構(gòu)-試驗一-一元多項式相加_第4頁
數(shù)據(jù)結(jié)構(gòu)-試驗一-一元多項式相加_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

北次聯(lián)々大孝數(shù)據(jù)結(jié)構(gòu)實驗報告實驗一:一元多項式相加姓 名: 周成學 號: 13083511專 業(yè): 軟件工程任課教師:馬慧珠2013年12月01日精選.實驗名稱:一兀多項式相加.實驗目的:如何使用C語言實現(xiàn)鏈表的說明、創(chuàng)建以及結(jié)點的插入和刪除等操作。.實驗要求:對一元多項式能實現(xiàn)輸入、輸出,以及兩個一元多項式相加及結(jié)果顯示O.實驗內(nèi)容:一元多項式的表示在計算機內(nèi)用鏈表來實現(xiàn),同時為了節(jié)省存儲空間,只存儲其中非零的項,鏈表中的每個節(jié)點存放多項式的系數(shù)非零項。它包含三個域,分別存放多項式的系數(shù),指數(shù),以及指向下一個項的指針。根據(jù)一元多項式相加的運算規(guī)則:對于兩個一元多項式中所有指數(shù)相同的項,對應系數(shù)相加,若其和不為零,則構(gòu)成“和多項式”中的一項,對于兩個一元多項式中所有指數(shù)不相同的項,則分別復抄到“和多項式”中去。核心算法PolyAdd是把分別由pa和pb所指的兩個多項式相加,結(jié)果為pa所指的多項式。運算規(guī)則如下:相加時,首先設(shè)兩個指針變量qa和qb分別從多項式的首項開始掃描,比較qa和qb所指結(jié)點指數(shù)域的值,可能出現(xiàn)下列三種情況之一:精選qa->exp大于qb->exp,則qa繼續(xù)向后掃描。qa->exp等于qb->exp,則將其系數(shù)相加。若相加結(jié)果不為零,將結(jié)果放入qa->coef中,并刪除qb所指結(jié)點,否則同時刪除qa和qb所指結(jié)點。然后qa、qb繼續(xù)向后掃描。(3)qa->exp小于qb->exp,則將qb所指結(jié)點插入qa所指結(jié)點之前,然后qa、qb繼續(xù)向后掃描。掃描過程一直進行到qa或qb有一個為空為止,然后將有剩余結(jié)點的鏈表接在結(jié)果表上。所得pa指向的鏈表即為兩個多項式之和。.實驗程序代碼及運行結(jié)果:#include"stdafx.h"#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<stdio.h>#defineNULL0typedefstructNODE(floatcoef; 〃系|t數(shù)°yint expn; 〃指?數(shù)°ystructNODE*next;}NODE;NODE*Creat(intn);voidprint(NODE*head);NODE*AddPolyn(NODE*head1,NODE*head2);NODE*Delfirst(NODE*head,NODE*q);voidInsertBefore(NODE*p1,NODE*p2);intcompare(inta,intb);/*創(chuàng)五行建1§鏈加五表A"”/NODE*Creat(intn)(NODE*current,"previous,*head;inti;head=(NODE*)malloc(sizeof(NODE));/*創(chuàng)五6建i§頭21]0結(jié).《點t?*/previous=head;for(i=0;i<n;i++)精選current=(NODE*)malloc(sizeof(NODE));printf(〃請?輸°?入“?系"數(shù)°y和“a指?數(shù)°y:");scanf("%f%d”,¤t->coef,¤t->expn);previous->next=current;previous=current;}previous->next=NULL;returnhead;}/*一°?元a多“0項?式°?的t?想?加“?,3?總A"】體-?考?慮?,3?可\分Q?qa的t?指?數(shù)°y比A”“qb???,3?或“。等1““于?“2pb(如“?果?系|t數(shù)°y相“0加“?等t““于?“2。和"a不?等t““于?_20),或“。大W“0于@“2口5里0?面?由?“UnsertBefore和“aDelfirst兩C?個?小?模i3塊."組A“|成“|一。?部?分0?*/NODE*AddPolyn(NODE*head1,NODE*head2)(NODE*ha,*hb,*qa,*qb;inta,b;floatsum;ha=head1;/*ha和“ahb指?向“°頭aj0結(jié)“C點t?*/hb=head2;qa=ha->next;/*qa和“aqb指?向“。頭,10結(jié)“C點t?的t?下?一。?個?結(jié)“唬點t?*/qb=hb->next;while(qa&&qb){/*qa和“aqb均“’非0?空?*/a=qa->expn;b=qb->expn;switch(compare(a,b)){case-1: /*qa->expn<qb->expn*/ha=qa;qa=qa->next;break;case0:sum=qa->coef+qb->coef;/*系|t數(shù)。y的t?和“a*/if(sum!=0.0){ /*如“?果?不?是。?0.0*/qa->coef=sum; /*改?變A?系|t數(shù)。y*/ha=qa;}else{free(Delfirst(ha,qa));精選

}free(Delfirst(hb,qb));qa=ha->next;qb=hb->next; /*qb釋。"放0?后.飛要°@重?新?賦3值1t*/break;/*如"?果/*如"?果?qa->expn>qb->expn*//*把五?qb插?入一?到t?ha下?一。?個?結(jié)"C點t?之?前/*//*插?入一??!銍?-0的t?pb*/Delfirst(hb,qb);InsertBefore(ha,qb);qb=hb->next;ha=ha->next;break;}}if(qb)ha->next=qb;free(head2);returnheadl;}/*比A"一較?*/intcompare(inta,intb)(if(a<b)return-1;elseif(a>b)return1;elsereturn0;}/*刪I?除y結(jié)"C點t?q*/NODE*Delfirst(NODE*p1,NODE*q)(p1->next=q->next;return(q);}/*插?入"?結(jié).《點t?,引°丫入"?結(jié)"C點t?p,可"以°?讓"?p插?入"?到t?p2和“apl之?間?*/voidInsertBefore(NODE*p1,NODE*p2)(NODE*p;p=p1->next;p1->next=p2;精選p2->next=p;}/*打五一°E印??,為@了附美“0觀?程.”序.…分0?開a打五.…印??*/voidprint(NODE*head)(NODE*current;current=head->next;while(current->next!=NULL)(printf("%0.f*x1%d+”,current->coef,current->expn);current=current->next;}printf("%0.f*x"%d”,current->coef,current->expn);//system(ej§"pause");}intmain()(NODE*head1,*head2,*head3;intn1,n2;printf(〃請?輸°?入“?你?需”.?要°@的1?多”0項?式°?的t?項?數(shù)°yn1:“);scanf("%d”,&n1);headl=Creat(n1);printf(〃第t-2一。?個?多“0項?式。?的t?顯?示。?:\//);print(head1);printf("\n請?輸°?入“?你?需”.?要°@的1?多“0項?式°?的t?項?數(shù)°yn2:“);scanf("%d”,&n2);head2=Creat(n2);printf("\n第t"2二t個?多“0項?式°?的t?顯?示°?:\n");print(head2);head3=AddPolyn(head1,head2);printf("\n合?并iC后“?的t?多“0項?式°?的t?顯?示°?:\n");print(head3);printf(〃\n〃);}精選

運行結(jié)果:實驗數(shù)據(jù)1如圖:輸入一個四次二項式XA3+2XA4,一個五次二項式XA4+2XA5,輸出如圖::13;244項式的項數(shù)::25第二個多項式的顯示;1*XA4+2*x:13;244項式的項數(shù)::25第二個多項式的顯示;1*XA4+2*xA5合并后的多項式的顯示=**7+3* +2*乂入6主同請-trJxmrlnT為-內(nèi)inuniH我&釜和利7e2B4和和"教數(shù)項總數(shù)數(shù)吵孌13您不系實驗數(shù)據(jù)2如圖:輸入一個五次四項式XA2+XA3+X%+XA5,還有一個五次五項式1+X+XA3+2XA4+2XA5輸出如圖所示項^23451+12*項^-013451.B1111--?DM111項^23451+12*項^-013451.B1111--?DM111加 n如;.-至教教數(shù)數(shù)匕丈^^數(shù)數(shù)數(shù)數(shù)向匕艮艮日口對白匕縣目艮日日五」口口口n^'---lK1?口口口口口要市幸01要本下市矛本數(shù)數(shù)項+數(shù)數(shù)數(shù)數(shù).簟參2華系系系系青請請請青一青青主閆青青青笫二個多項式的顯示:± * X,舞4- 1 ? 區(qū)人士 , 1 *m + 2 * 乂-4 + 2 * kF合并后的多項式的顯示:1 * 乂入城 + 1 * x^l + 1 ? M-2 + 2 * X-3 + 3 * 乂人4 *3妊xA5請接任意鍵繼續(xù).--精選實驗數(shù)據(jù)3如圖:輸入一個七次三項式1+2xA5+3XA7,還有一個五次四項式1+2XA2+3XA4+4XA5,輸出如圖:國C:\Windcw5\5ystein3Z^cnnd,e^eaaaa^.xaaaaa貝國C:\Windcw5\5ystein3Z^cnnd,e^eaaaa^.xaaaaa貝 示弓砥

數(shù)數(shù)應MX數(shù)數(shù)數(shù)HEHEHEsK委*項02453—&1234二個多項式的顯示=翼人回+2*乂人2+3*并后的多項式的顯示:xA0+2*xA2+3*接任意鍵繼續(xù)...6.實驗總結(jié)本來我對編程很沒有信心,做這樣一個課程設(shè)計感覺有點吃力,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論