版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計</b></p><p><b> 報 告</b></p><p> 設(shè)計題目:一元多項式的加法、減法、乘法的實現(xiàn)</p><p> 專 業(yè): 計算機科學(xué)與技術(shù)(嵌入式) </p><p> 學(xué)生姓名:
2、 </p><p> 班級學(xué)號: </p><p> 分組成員: </p><p> 指導(dǎo)教師: </p><p> 2012 年 6月 8日</p&g
3、t;<p> 1006402《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告</p><p><b> 設(shè)計時間</b></p><p> 2011年6月4日——6月8日</p><p><b> 設(shè)計地點</b></p><p> 湖南城市學(xué)院實驗樓計算機房407</p><p
4、><b> 設(shè)計目的</b></p><p> 《數(shù)據(jù)結(jié)構(gòu)》主要介紹最常用的數(shù)據(jù)結(jié)構(gòu),闡明各種數(shù)據(jù)結(jié)構(gòu)內(nèi)在的邏輯關(guān)系,討論其在計算機中的存儲表示,以及在其上進(jìn)行各種運算時的實現(xiàn)算法,并對算法的效率進(jìn)行簡單的分析和討論,是介于數(shù)學(xué)、計算機軟件和計算機硬件之間的一門計算機專業(yè)的核心課程,它是計算機程序設(shè)計、數(shù)據(jù)庫、操作系統(tǒng)、編譯原理及人工智能等的重要基礎(chǔ),廣泛的應(yīng)用于信息學(xué)、系統(tǒng)工程等
5、各種領(lǐng)域。</p><p> 該課程的特點是實踐性較強,為了學(xué)好這門課程,需要在掌握理論知識的同時,加強上機實踐。本課程設(shè)計的目的就是要達(dá)到理論與實際應(yīng)用相結(jié)合,使同學(xué)們能夠根據(jù)數(shù)據(jù)對象的特性,學(xué)會數(shù)據(jù)組織的方法,能把現(xiàn)實世界中的實際問題在計算機內(nèi)部表示出來,并培養(yǎng)基本的、良好的程序設(shè)計技能。</p><p><b> 具體要求如下:</b></p>
6、<p> 1.了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,具備初步的獨立分析和設(shè)計能力;</p><p> 2.初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼測試等基本方法和技能;</p><p> 3.提高綜合運用所學(xué)的理論知識和方法獨立分析和解決問題的能力;</p><p> 4.訓(xùn)練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)
7、具備的科學(xué)的工作方法和作風(fēng)。</p><p><b> 設(shè)計小組成員</b></p><p><b> 指導(dǎo)教師:</b></p><p><b> 設(shè)計課題:</b></p><p> 順序結(jié)構(gòu)、動態(tài)鏈表結(jié)構(gòu)下的一元多項式的加法、減法、乘法的實現(xiàn)</p>
8、<p> 設(shè)有一元多項式Am(x)和Bn(x).Am(x)=A0+A1x1+A2x2+A3x3+…+AmxmBn(x)=B0+B1x1+B2x2+B3x3+…+Bnxn請實現(xiàn)求M(x)=Am(x)+Bn(x)、M(x)=Am(x)-Bn(x)和M(x)=Am(x)×Bn(x)。要求:1)首先判定多項式是否稀疏2)分別采用順序和動態(tài)存儲結(jié)構(gòu)實現(xiàn);3)結(jié)果M(x)中無重復(fù)階項和無零系數(shù)項;4)要求輸出
9、結(jié)果的升冪和降冪兩種排列情況</p><p> 基本思路及關(guān)鍵問題的解決方法</p><p> 輸入多項式各項的系數(shù)和指數(shù)并對其進(jìn)行稀疏判斷,然后選擇實現(xiàn)結(jié)構(gòu),判斷為順序結(jié)構(gòu)或動態(tài)鏈表結(jié)構(gòu),分別進(jìn)行處理,再選定計算方法(進(jìn)行加法、減法和乘法判斷),然后用相應(yīng)的計算方法對多項式進(jìn)行計算,最后判斷升冪或降冪的輸出方式進(jìn)行輸出。</p><p><b>
10、算法及流程圖;</b></p><p><b> 流程圖:</b></p><p><b> 是否</b></p><p> 是否 是否</p><p><b> 否</b></p><p><b> 是
11、否</b></p><p><b> 是否</b></p><p><b> 是否是否</b></p><p><b> 運行如圖:</b></p><p><b> 運算操作方式:</b></p><p&g
12、t; 加法:兩多項式指數(shù)相同項指數(shù)不變系數(shù)相加</p><p> 減法:兩多項式指數(shù)相同項指數(shù)不變系數(shù)相減</p><p> 相乘:第一個多項式的各項和第二個多項式的各項分別相乘再相加,其中系數(shù)相乘指數(shù)相加,具體表達(dá)式如下:</p><p> 假設(shè)A(x)和B(x)為一元多項式,則</p><p> M(x) = A(x) * B(
13、x)</p><p> = A(x) * [ b1x^e1+b2x^e2+…+bnx^en]</p><p> = biA(x)x^ei</p><p> 調(diào)試過程中出現(xiàn)的問題及相應(yīng)解決辦法;</p><p> 獨立測試各個模塊的功能時發(fā)現(xiàn)在創(chuàng)建鏈表后和另一個進(jìn)行運算后多余的存儲單元沒有釋放而造成內(nèi)存的泄漏,還有對于鏈表的運算時結(jié)束條
14、件掌握不透徹導(dǎo)致沒有按計劃地去結(jié)束,比如在用For循環(huán)及While循環(huán)時沒有正確地判斷指針的移動與結(jié)束條件而得不到自己想要的結(jié)果。進(jìn)入函數(shù)內(nèi)部調(diào)試時發(fā)現(xiàn)有誤用沒有初始化的變量,還有贅余的語句擾亂了代碼的健壯性。 在主函數(shù)中對各個函數(shù)的調(diào)用時沒有一個清晰的思路,使程序顯得很混亂,給調(diào)試造成了很大困難。 對非法操作控制的不夠完善,例如缺少對越界訪問及其非法數(shù)據(jù)的控制機制,使程序的安全性下降。對于每創(chuàng)建一個鏈表,每次在進(jìn)行完相應(yīng)操作之后應(yīng)該對
15、其鏈表進(jìn)行刪除釋放,并且要做到在適當(dāng)?shù)臅r間進(jìn)行刪除,對于運算結(jié)束的條件的意識不是很清楚,運算結(jié)束的標(biāo)識是當(dāng)結(jié)點指針移動并且為空時結(jié)束,還有在用指針和變量的時候注意初始化問題,并且盡量使得程序保持良好的可讀性。</p><p><b> 課程設(shè)計心得體會;</b></p><p> 編寫的程序不但要拿來使用,還要給別人查看,以便代碼的維護(hù)。所以代碼編寫的風(fēng)格盡量規(guī)范
16、,清晰。變量要盡量少定義,結(jié)構(gòu)夜采用簡單的。另外,對指針的使用要小心,盡量在定義的時候就進(jìn)行初始化,避免野指針,指針的使用涉及到內(nèi)存的分配。該程序基本實現(xiàn)了要求的順序結(jié)構(gòu)、動態(tài)鏈表結(jié)構(gòu)下的一元多項式的加法、減法、乘法等功能。代碼較為冗余,可讀性較差,可以多添加一些提示語句以及注釋。</p><p> 在這次課程設(shè)計中我又進(jìn)一步地了解了數(shù)據(jù)結(jié)構(gòu)中算法的核心思想的重要性,懂得了一個程序地好壞關(guān)鍵在于算法是否優(yōu)秀,一
17、個好的優(yōu)秀的算法可以使我們的程序更加完善,安全性更高以及有更高的效率。這次設(shè)計中我發(fā)現(xiàn)了自己的許多不足,如對指針的機制掌握的還不是很透徹,有的時候會出現(xiàn)指針指向錯誤以及空指針的錯誤,還有不能很好地分析自己算法地復(fù)雜度以及不能很好地使用控制機制使自己的程序流暢地運行。</p><p> 部分源程序(核心代碼)</p><p> void mulpoly(double *a,double
18、*b,double *c) //一元多項式順序結(jié)構(gòu)乘法實現(xiàn)</p><p><b> {</b></p><p> int max=cp1[n1-1].expn+cp2[n2-1].expn+2;</p><p><b> int i,j;</b></p><p> for(i=0;i<
19、;max;i++)</p><p><b> c[i]=0;</b></p><p> for(i=0;i<=cp1[n1-1].expn;i++)</p><p> for(j=0;j<=cp2[n2-1].expn;j++)</p><p> c[i+j]+=a[i]*b[j];</p>
20、;<p> puts("相乘結(jié)果為:");</p><p> ansprint(c,max-1);</p><p><b> }</b></p><p> void ansprint(double *a,int n) //結(jié)果打印函數(shù)</p><p><b> {&
21、lt;/b></p><p> int choose;</p><p> puts("請選擇輸出順序:1 升冪 2 降冪:");</p><p> scanf("%d",&choose);</p><p> int i,num;</p><p> if(c
22、hoose!=2) //升冪打印</p><p><b> {</b></p><p> if(choose!=1)</p><p> printf("沒有%d選項,系統(tǒng)將默認(rèn)輸出升序:\nY(X)=",choose);</p><p><b> else</b
23、></p><p> printf("Y(X)=");</p><p><b> num=0;</b></p><p> for(i=0;i<=n;i++)</p><p> if(fabs(a[i])>1e-8)</p><p><b>
24、 {</b></p><p><b> if(num++)</b></p><p> putchar('+');</p><p> printf("%lfX^%d",a[i],i);</p><p><b> }</b></p>
25、<p><b> }</b></p><p> else //降冪打印</p><p><b> {</b></p><p> printf("Y(X)=");</p><p><b> num=0;</b></p>
26、;<p> for(i=n;i>=0;i--)</p><p> if(fabs(a[i])>1e-8)</p><p><b> {</b></p><p><b> if(num++)</b></p><p> putchar('+');<
27、;/p><p> printf("%lfX^%d",a[i],i);</p><p><b> }</b></p><p><b> }</b></p><p> putchar(10);</p><p><b> }</b>&
28、lt;/p><p> 動態(tài)鏈表的建立和構(gòu)造:</p><p> typedef struct p_pol //結(jié)構(gòu)結(jié)點定義</p><p><b> {</b></p><p> double coef;</p><p><b> int expn;</b><
29、/p><p> p_pol *next;</p><p><b> }MPP;</b></p><p> MPP * creatlink(MPP *p,int n,int pt) //構(gòu)造動態(tài)鏈表結(jié)構(gòu)</p><p><b> {</b></p><p> MPP
30、*d,*q;</p><p><b> int i;</b></p><p> q=(MPP *)malloc(sizeof(MPP)); //頭結(jié)點</p><p> if(q==NULL)</p><p><b> exit(0);</b></p><p>
31、 q->next=NULL;</p><p> q->coef=INFCO;</p><p> q->expn=-INFEX;</p><p><b> p=q;</b></p><p> for(i=0;i<n;i++)</p><p><b> {&
32、lt;/b></p><p> d=(MPP *)malloc(sizeof(MPP));</p><p> if(d==NULL)</p><p><b> exit(0);</b></p><p> d->next=NULL;</p><p><b> if(p
33、t==1)</b></p><p><b> {</b></p><p> d->coef=cp1[i].coef;</p><p> d->expn=cp1[i].expn;</p><p><b> }</b></p><p><b&
34、gt; else</b></p><p><b> {</b></p><p> d->coef=cp2[i].coef;</p><p> d->expn=cp2[i].expn;</p><p><b> }</b></p><p>
35、q->next=d;</p><p><b> q=d;</b></p><p><b> }</b></p><p> return p; //返回頭指針</p><p><b> }</b></p><p> 動態(tài)鏈表結(jié)構(gòu)實現(xiàn)加法
36、:</p><p> void addlink(MPP *p1,MPP *p2,MPP *p3) //動態(tài)鏈表相加</p><p><b> {</b></p><p> MPP * p,*head;</p><p> p=(MPP *)malloc(sizeof(MPP)); //頭結(jié)點</p>
37、;<p> if(p==NULL)</p><p><b> exit(0);</b></p><p> p->coef=INFCO;</p><p> p->expn=-INFEX;</p><p> p->next=NULL;</p><p> he
38、ad=p3=p;</p><p> p1=p1->next;</p><p> p2=p2->next;</p><p> while(p1!=NULL||p2!=NULL)</p><p><b> {</b></p><p> if(fabs(head->coef)
39、>1e-8) //如果系數(shù)不為0</p><p><b> {</b></p><p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p==NULL)</p><p><b> exit(0);</b></p><p>
40、; head->next=p;</p><p><b> head=p;</b></p><p> head->next=NULL;</p><p><b> }</b></p><p> if(p1==NULL)</p><p><b>
41、{</b></p><p> head->coef=p2->coef;</p><p> head->expn=p2->expn;</p><p> p2=p2->next;</p><p><b> continue;</b></p><p>&
42、lt;b> }</b></p><p> if(p2==NULL)</p><p><b> {</b></p><p> head->coef=p1->coef;</p><p> head->expn=p1->expn;</p><p>
43、p1=p1->next;</p><p><b> continue;</b></p><p><b> }</b></p><p> if(p1->expn==p2->expn) //如果系數(shù)相同</p><p><b> {</b></p
44、><p> head->coef=p1->coef+p2->coef;</p><p> head->expn=p1->expn;</p><p> p1=p1->next;</p><p> p2=p2->next;</p><p><b> }</b&
45、gt;</p><p> else if(p1->expn<p2->expn)</p><p><b> {</b></p><p> head->coef=p1->coef;</p><p> head->expn=p1->expn;</p><p&
46、gt; p1=p1->next;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> head->coef=p2->coef;</p><p&g
47、t; head->expn=p2->expn;</p><p> p2=p2->next;</p><p><b> }</b></p><p><b> }</b></p><p> puts("相加結(jié)果為:");</p><p&
48、gt; printlink(p3);</p><p><b> }</b></p><p><b> 源程序:</b></p><p> #include<stdio.h></p><p> #include<math.h></p><p>
49、 #include<stdlib.h></p><p> #define INFEX 10000</p><p> #define INFCO 10000</p><p> typedef struct pol</p><p><b> {</b></p><p> dou
50、ble coef;</p><p><b> int expn;</b></p><p><b> }MPOL;</b></p><p> MPOL *cp1,*cp2;</p><p> //-----順序結(jié)構(gòu)部分-----</p><p> int n1,n2;
51、</p><p> void ansprint(double *a,int n) //打印出結(jié)果</p><p><b> {</b></p><p> int choose;</p><p> puts("請選擇輸出順序:1 升冪 2 降冪:");</p><p>
52、 scanf("%d",&choose);</p><p> int i,num;</p><p> if(choose!=2) //升冪打印</p><p><b> {</b></p><p> if(choose!=1)</p><p>
53、 printf("沒有%d選項,系統(tǒng)將默認(rèn)輸出升序:\nY(X)=",choose);</p><p><b> else</b></p><p> printf("Y(X)=");</p><p><b> num=0;</b></p><p>
54、for(i=0;i<=n;i++)</p><p> if(fabs(a[i])>1e-8)</p><p><b> {</b></p><p><b> if(num++)</b></p><p> putchar('+');</p><p
55、> printf("%lfX^%d",a[i],i);</p><p><b> }</b></p><p><b> }</b></p><p> else //降冪打印</p><p><b> {</b></p>
56、<p> printf("Y(X)=");</p><p><b> num=0;</b></p><p> for(i=n;i>=0;i--)</p><p> if(fabs(a[i])>1e-8)</p><p><b> {</b>&l
57、t;/p><p><b> if(num++)</b></p><p> putchar('+');</p><p> printf("%lfX^%d",a[i],i);</p><p><b> }</b></p><p><b
58、> }</b></p><p> putchar(10);</p><p><b> }</b></p><p> void addpoly(double *a,double *b,double *c) //順序結(jié)構(gòu)相加</p><p><b> {</b></
59、p><p> int min=(cp1[n1-1].expn>cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);</p><p> int max=(cp1[n1-1].expn<cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);</p><p><b> i
60、nt i;</b></p><p> for(i=0;i<=min;i++)</p><p> c[i]=a[i]+b[i];</p><p> for(;i<=max;i++)</p><p> if(cp1[n1-1].expn>cp2[n2-1].expn)</p><p>
61、 c[i]=a[i];</p><p><b> else</b></p><p> c[i]=b[i];</p><p> puts("相加結(jié)果為:");</p><p> ansprint(c,max);</p><p><b> }</b>
62、;</p><p> void subpoly(double *a,double *b,double *c) //順序結(jié)構(gòu)相減</p><p><b> {</b></p><p> int min=(cp1[n1-1].expn>cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);<
63、;/p><p> int max=(cp1[n1-1].expn<cp2[n2-1].expn?cp2[n2-1].expn:cp1[n1-1].expn);</p><p><b> int i;</b></p><p> for(i=0;i<=min;i++)</p><p> c[i]=a[i]-b
64、[i];</p><p> for(;i<=max;i++)</p><p> if(cp1[n1-1].expn>cp2[n2-1].expn)</p><p> c[i]=a[i];</p><p><b> else</b></p><p> c[i]=-b[i];&l
65、t;/p><p> puts("相減結(jié)果為:");</p><p> ansprint(c,max);</p><p><b> }</b></p><p> void mulpoly(double *a,double *b,double *c) //順序結(jié)構(gòu)相乘</p><
66、;p><b> {</b></p><p> int max=cp1[n1-1].expn+cp2[n2-1].expn+2;</p><p><b> int i,j;</b></p><p> for(i=0;i<max;i++)</p><p><b> c[i
67、]=0;</b></p><p> for(i=0;i<=cp1[n1-1].expn;i++)</p><p> for(j=0;j<=cp2[n2-1].expn;j++)</p><p> c[i+j]+=a[i]*b[j];</p><p> puts("相乘結(jié)果為:");</
68、p><p> ansprint(c,max-1);</p><p><b> }</b></p><p> void creatpoly1(double *a,int pt) //建立順序結(jié)構(gòu)</p><p><b> {</b></p><p><b>
69、 int i;</b></p><p><b> if(pt==1)</b></p><p><b> {</b></p><p> for(i=0;i<=cp1[n1-1].expn;i++)</p><p><b> a[i]=0;</b><
70、;/p><p> for(i=0;i<n1;i++)</p><p> a[cp1[i].expn]=cp1[i].coef;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b&g
71、t;</p><p> for(i=0;i<=cp2[n2-1].expn;i++)</p><p><b> a[i]=0;</b></p><p> for(i=0;i<n2;i++)</p><p> a[cp2[i].expn]=cp2[i].coef;</p><p>
72、;<b> }</b></p><p><b> }</b></p><p> //-----動態(tài)鏈?zhǔn)浇Y(jié)構(gòu)部分-----</p><p> typedef struct p_pol //結(jié)點定義</p><p><b> {</b></p><
73、p> double coef;</p><p><b> int expn;</b></p><p> p_pol *next;</p><p><b> }MPP;</b></p><p> MPP * creatlink(MPP *p,int n,int pt) //構(gòu)造動態(tài)
74、鏈表結(jié)構(gòu)</p><p><b> {</b></p><p> MPP *d,*q;</p><p><b> int i;</b></p><p> q=(MPP *)malloc(sizeof(MPP));</p><p> if(q==NULL)</p
75、><p><b> exit(0);</b></p><p> q->next=NULL;</p><p> q->coef=INFCO;</p><p> q->expn=-INFEX;</p><p><b> p=q;</b></p>
76、<p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> d=(MPP *)malloc(sizeof(MPP));</p><p> if(d==NULL)</p><p><b> exit(0);</b></p>
77、;<p> d->next=NULL;</p><p><b> if(pt==1)</b></p><p><b> {</b></p><p> d->coef=cp1[i].coef;</p><p> d->expn=cp1[i].expn;<
78、/p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> d->coef=cp2[i].coef;</p><p> d->expn=cp2[i].expn;
79、</p><p><b> }</b></p><p> q->next=d;</p><p><b> q=d;</b></p><p><b> }</b></p><p><b> return p;</b>&
80、lt;/p><p><b> }</b></p><p> void printlink(MPP * p) //打印結(jié)果</p><p><b> {</b></p><p> int num=0,i=0,choose,count;</p><p> puts(&
81、quot;請選擇輸出順序:1 升冪 2 降冪:");</p><p> scanf("%d",&choose);</p><p> MPP *tp=p;</p><p> p=p->next;</p><p> while(p!=NULL)</p><p><b
82、> {</b></p><p><b> num++;</b></p><p> p=p->next;</p><p><b> }</b></p><p> MPOL *d=new MPOL[num];</p><p> p=tp->
83、;next;</p><p> while(p!=NULL)</p><p><b> {</b></p><p> d[i].coef=p->coef;</p><p> d[i].expn=p->expn;</p><p><b> i++;</b>
84、</p><p> p=p->next;</p><p><b> }</b></p><p> if(choose==2) //降冪打印</p><p><b> {</b></p><p><b> count=0;</b><
85、;/p><p> printf("Y(X)=");</p><p> for(i=num-1;i>=0;i--)</p><p><b> {</b></p><p> if(count++)</p><p> putchar('+');</p
86、><p> printf("%lfX^%d",d[i].coef,d[i].expn);</p><p><b> }</b></p><p><b> }</b></p><p> else //升冪打印</p><p><b>
87、{</b></p><p> if(choose!=1)</p><p> printf("沒有%d選項,系統(tǒng)將默認(rèn)輸出升序:\nY(X)=",choose);</p><p><b> else</b></p><p> printf("Y(X)=");<
88、;/p><p> for(i=0;i<num;i++)</p><p><b> {</b></p><p> if(count++)</p><p> putchar('+');</p><p> printf("%lfX^%d",d[i].coe
89、f,d[i].expn);</p><p><b> }</b></p><p><b> }</b></p><p> putchar(10);</p><p><b> }</b></p><p> void addlink(MPP *p1
90、,MPP *p2,MPP *p3) //動態(tài)鏈表相加</p><p><b> {</b></p><p> MPP * p,*head;</p><p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p==NULL)</p><p><b&
91、gt; exit(0);</b></p><p> p->coef=INFCO;</p><p> p->expn=-INFEX;</p><p> p->next=NULL;</p><p> head=p3=p;</p><p> p1=p1->next;</p
92、><p> p2=p2->next;</p><p> while(p1!=NULL||p2!=NULL)</p><p><b> {</b></p><p> if(fabs(head->coef)>1e-8)</p><p><b> {</b>
93、</p><p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p==NULL)</p><p><b> exit(0);</b></p><p> head->next=p;</p><p><b> head=p;</b
94、></p><p> head->next=NULL;</p><p><b> }</b></p><p> if(p1==NULL)</p><p><b> {</b></p><p> head->coef=p2->coef;<
95、/p><p> head->expn=p2->expn;</p><p> p2=p2->next;</p><p><b> continue;</b></p><p><b> }</b></p><p> if(p2==NULL)</p&g
96、t;<p><b> {</b></p><p> head->coef=p1->coef;</p><p> head->expn=p1->expn;</p><p> p1=p1->next;</p><p><b> continue;</b&g
97、t;</p><p><b> }</b></p><p> if(p1->expn==p2->expn)</p><p><b> {</b></p><p> head->coef=p1->coef+p2->coef;</p><p>
98、; head->expn=p1->expn;</p><p> p1=p1->next;</p><p> p2=p2->next;</p><p><b> }</b></p><p> else if(p1->expn<p2->expn)</p>&l
99、t;p><b> {</b></p><p> head->coef=p1->coef;</p><p> head->expn=p1->expn;</p><p> p1=p1->next;</p><p><b> }</b></p>
100、<p><b> else</b></p><p><b> {</b></p><p> head->coef=p2->coef;</p><p> head->expn=p2->expn;</p><p> p2=p2->next;</p&
101、gt;<p><b> }</b></p><p><b> }</b></p><p> puts("相加結(jié)果為:");</p><p> printlink(p3);</p><p><b> }</b></p>&
102、lt;p> void sublink(MPP *p1,MPP *p2,MPP *p3) //動態(tài)鏈表相減</p><p><b> {</b></p><p> MPP * p,*head;</p><p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p==NU
103、LL)</p><p><b> exit(0);</b></p><p> p->coef=INFCO;</p><p> p->expn=-INFEX;</p><p> p->next=NULL;</p><p> head=p3=p;</p>&l
104、t;p> p1=p1->next;</p><p> p2=p2->next;</p><p> while(p1!=NULL||p2!=NULL)</p><p><b> {</b></p><p> if(fabs(head->coef)>1e-8)</p>&
105、lt;p><b> {</b></p><p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p==NULL)</p><p><b> exit(0);</b></p><p> head->next=p;</p><
106、;p><b> head=p;</b></p><p> head->next=NULL;</p><p><b> }</b></p><p> if(p1==NULL)</p><p><b> {</b></p><p>
107、head->coef=-p2->coef;</p><p> head->expn=p2->expn;</p><p> p2=p2->next;</p><p><b> continue;</b></p><p><b> }</b></p>
108、<p> if(p2==NULL)</p><p><b> {</b></p><p> head->coef=p1->coef;</p><p> head->expn=p1->expn;</p><p> p1=p1->next;</p><p&
109、gt;<b> continue;</b></p><p><b> }</b></p><p> if(p1->expn==p2->expn)</p><p><b> {</b></p><p> head->coef=p1->coef-p
110、2->coef;</p><p> head->expn=p1->expn;</p><p> p1=p1->next;</p><p> p2=p2->next;</p><p><b> }</b></p><p> else if(p1->exp
111、n<p2->expn)</p><p><b> {</b></p><p> head->coef=p1->coef;</p><p> head->expn=p1->expn;</p><p> p1=p1->next;</p><p><
112、;b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> head->coef=-p2->coef;</p><p> head->expn=p2->expn;</p>&
113、lt;p> p2=p2->next;</p><p><b> }</b></p><p><b> }</b></p><p> puts("相減結(jié)果為:");</p><p> printlink(p3);</p><p><
114、;b> }</b></p><p> void mullink(MPP *p1,MPP *p2,MPP *p3) //動態(tài)鏈表相乘</p><p><b> {</b></p><p> MPP *p,*head,*d,*tp;</p><p><b> int i,j;</b
115、></p><p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p==NULL)</p><p><b> exit(0);</b></p><p> p->coef=INFCO;</p><p> p->expn=-INFEX
116、;</p><p> p->next=NULL;</p><p> tp=head=p3=p;</p><p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p==NULL)</p><p><b> exit(0);</b></p&g
117、t;<p> p->coef=INFCO;</p><p> p->expn=INFEX;</p><p> p->next=NULL;</p><p> tp->next=p;</p><p> for(i=0;i<n1;i++)</p><p><b>
118、; {</b></p><p> p1=p1->next;</p><p><b> d=p2;</b></p><p> for(j=0;j<n2;j++)</p><p><b> {</b></p><p> d=d->next
119、;</p><p> p=(MPP *)malloc(sizeof(MPP));</p><p> if(p==NULL)</p><p><b> exit(0);</b></p><p> p->next=NULL;</p><p> p->coef=p1->coe
120、f*d->coef;</p><p> p->expn=p1->expn+d->expn;</p><p><b> tp=p3;</b></p><p> while(tp->next!=NULL)</p><p><b> {</b></p>
121、<p> if(tp->expn==p->expn)</p><p><b> {</b></p><p> tp->coef+=p->coef;</p><p><b> free(p);</b></p><p><b> break;<
122、/b></p><p><b> }</b></p><p> if(tp->expn<p->expn&&tp->next->expn>p->expn)</p><p><b> {</b></p><p> p->nex
123、t=tp->next;</p><p> tp->next=p;</p><p><b> break;</b></p><p><b> }</b></p><p> tp=tp->next;</p><p><b> }</b&
124、gt;</p><p><b> }</b></p><p><b> }</b></p><p><b> tp=p3;</b></p><p> while(tp->next!=NULL)</p><p><b> {<
125、;/b></p><p> if(tp->next->expn==INFEX)</p><p><b> {</b></p><p> free(tp->next);</p><p> tp->next=NULL;</p><p><b> bre
126、ak;</b></p><p><b> }</b></p><p> tp=tp->next;</p><p><b> }</b></p><p> puts("相乘結(jié)果為:");</p><p> printlink(p3
127、);</p><p><b> }</b></p><p> void deletelink(MPP *p) //刪除結(jié)點釋放內(nèi)存</p><p><b> {</b></p><p><b> MPP *d;</b></p><p>
128、 while(p!=NULL)</p><p><b> {</b></p><p><b> d=p;</b></p><p> p=p->next;</p><p><b> free(d);</b></p><p><b>
129、 }</b></p><p><b> }</b></p><p> int main()</p><p><b> {</b></p><p> int i,choose,choose2;</p><p> puts("輸入第一個多項式的項
130、數(shù):");</p><p> scanf("%d",&n1);</p><p> cp1=(MPOL *)malloc(n1*sizeof(MPOL));</p><p> puts("分別輸入各項的系數(shù)和指數(shù):");</p><p> for(i=0;i<n1;i++)
131、</p><p> scanf("%lf%d",&cp1[i].coef,&cp1[i].expn);</p><p> if(n1<(cp1[n1-1].expn+1)/2)</p><p> puts("此多項式稀疏!");</p><p><b> else
132、</b></p><p> puts("此多項式稠密!");</p><p> puts("輸入第二個多項式的項數(shù):");</p><p> scanf("%d",&n2);</p><p> cp2=(MPOL *)malloc(n2*sizeof(MP
133、OL));</p><p> puts("分別輸入各項的系數(shù)和指數(shù):");</p><p> for(i=0;i<n2;i++)</p><p> scanf("%lf%d",&cp2[i].coef,&cp2[i].expn);</p><p> if(n2<(cp
134、2[n2-1].expn+1)/2)</p><p> puts("此多項式稀疏!");</p><p><b> else</b></p><p> puts("此多項式稠密!");</p><p> puts("請選擇實現(xiàn)結(jié)構(gòu):1 順序結(jié)構(gòu) 2 動態(tài)鏈表結(jié)構(gòu)!
135、");</p><p> scanf("%d",&choose);</p><p> double *c1,*c2,*c3;</p><p> MPP *p1=NULL,*p2=NULL,*p3=NULL;</p><p> switch(choose)</p><p>&
136、lt;b> {</b></p><p><b> case 1:</b></p><p> c1=(double *)malloc((cp1[n1-1].expn+1)*sizeof(double));</p><p> c2=(double *)malloc((cp1[n2-1].expn+1)*sizeof(dou
137、ble));</p><p> creatpoly1(c1,1);</p><p> creatpoly1(c2,2);</p><p><b> break;</b></p><p><b> case 2:</b></p><p> p1=creatlink(p
138、1,n1,1);</p><p> p2=creatlink(p2,n2,2);</p><p><b> break;</b></p><p><b> default:</b></p><p> printf("沒有%d選項系統(tǒng)將自動調(diào)用默認(rèn)結(jié)構(gòu)(動態(tài)鏈表)!??!\n"
139、;,choose);</p><p><b> choose=2;</b></p><p> p1=creatlink(p1,n1,1);</p><p> p2=creatlink(p2,n2,2);</p><p><b> }</b></p><p> put
140、s("選擇操作方式:1 相加 2 相減 3 相乘");</p><p> scanf("%d",&choose2);</p><p> c3=(double *)malloc((cp1[n1-1].expn+cp2[n2-1].expn+2)*sizeof(double));</p><p> if(choose
141、==1)</p><p><b> {</b></p><p> switch(choose2)</p><p><b> {</b></p><p><b> case 1:</b></p><p> addpoly(c1,c2,c3);&
142、lt;/p><p><b> break;</b></p><p><b> case 2:</b></p><p> subpoly(c1,c2,c3);</p><p><b> break;</b></p><p><b> cas
143、e 3:</b></p><p> mulpoly(c1,c2,c3);</p><p><b> break;</b></p><p><b> default:</b></p><p> printf("沒有%d選項系統(tǒng)將自動調(diào)用默認(rèn)操作(相加)!?。n"
144、;,choose);</p><p> addpoly(c1,c2,c3);</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {<
145、/b></p><p> switch(choose2)</p><p><b> {</b></p><p><b> case 1:</b></p><p> addlink(p1,p2,p3);</p><p><b> break;</
146、b></p><p><b> case 2:</b></p><p> sublink(p1,p2,p3);</p><p><b> break;</b></p><p><b> case 3:</b></p><p> mulli
147、nk(p1,p2,p3);</p><p><b> break;</b></p><p><b> default:</b></p><p> printf("沒有%d選項系統(tǒng)將自動調(diào)用默認(rèn)操作(相加)!??!\n",choose);</p><p> choose2=1
148、;</p><p> addlink(p1,p2,p3);</p><p><b> }</b></p><p> deletelink(p1);</p><p> deletelink(p2);</p><p> deletelink(p3);</p><p>
149、;<b> }</b></p><p> free(cp1);</p><p> free(cp2);</p><p> if(choose!=2)</p><p><b> {</b></p><p><b> free(c1);</b>&
150、lt;/p><p><b> free(c2);</b></p><p><b> free(c3);</b></p><p><b> }</b></p><p> system("pause");</p><p> syst
151、em("cls");</p><p><b> main();</b></p><p><b> return 0;</b></p><p><b> }</b></p><p><b> 參考文獻(xiàn)</b></p>
152、<p> ?。?]蘇仕華等編著.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計.機械工業(yè)出版社.2007</p><p> [2]嚴(yán)蔚敏等編著.數(shù)據(jù)結(jié)構(gòu)(C語言版).清華大學(xué)出版社.2003</p><p> ?。?]嚴(yán)蔚敏等編著.數(shù)據(jù)結(jié)構(gòu)題集(C語言版).清華大學(xué)出版社,2003</p><p> ?。?].鄭莉等 編著. C++程序設(shè)計語言(第三版).清華大學(xué)出版社,2005.
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_一元多項式的加法、減法、乘法的實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---一元多項式的加法、減法、乘法的實現(xiàn)
- 一元多項式的加法、減法、乘法的實現(xiàn)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)一元多項式加法器課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---一元多項式
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----一元多項式
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告一元多項式的實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計一元多項式的加減法運算
- 一元多項式計算(數(shù)據(jù)結(jié)構(gòu)課程設(shè)計)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---一元多項式計算
- 算法分析與設(shè)計的課程設(shè)計(一元多項式的加法、減法、乘法的實現(xiàn))
- 一元多項式的計算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-一元多項式的代數(shù)運算
- 順序鏈?zhǔn)揭辉囗検郊臃āp法、乘法運算的實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告一元多項式的計算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告一元多項式的計算
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告一元多項式的計算
- 抽象數(shù)據(jù)結(jié)構(gòu)一元多項式的實現(xiàn)
- 一元多項式的計算數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-一元多項式的表示及相加
評論
0/150
提交評論