版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 實驗課程名稱 數(shù)據(jù)結(jié)構(gòu)與課程設(shè)計 </p><p> 專 業(yè) 班 級 10級計科(2)班 </p><p> 學 生 姓 名 </p><p> 學 號 </
2、p><p> 指 導 教 師 </p><p> 2012 至 2013學年第 1 學期第 4 至 5 周</p><p><b> 目錄</b></p><p><b> 1 概述1</b></p><p><
3、b> 1 系統(tǒng)分析1</b></p><p> 2.1設(shè)計函數(shù)建立稀疏矩陣及初始化值和輸出稀疏矩陣的值1</p><p> 2.2造函數(shù)并輸出最終稀疏矩陣1</p><p><b> 3 概要設(shè)計1</b></p><p> 3.1存儲結(jié)構(gòu)設(shè)計1</p><p&g
4、t; 3.2系統(tǒng)功能設(shè)計1</p><p><b> 4 詳細設(shè)計2</b></p><p> 4.1 稀疏矩陣的存儲2</p><p> 4.2 稀疏矩陣的加法2</p><p><b> 5 程序代碼4</b></p><p><b> 6
5、 運行與測試7</b></p><p><b> 7 總結(jié)與心得7</b></p><p><b> 8 參考文獻7</b></p><p><b> 1 概述</b></p><p> 掌握稀疏矩陣的加法運算,稀疏矩陣的存儲方法,每一個元素可能有多個
6、直接前驅(qū)和多個直接后繼。一般情況下都是采用順序存儲方法來表示數(shù)組,但有時在實際應用中,一般的順序存儲方法已經(jīng)不太實用。有時候用普通存儲方法就會造成很大的空間浪費。為了節(jié)省存儲單元,用壓縮方法只存儲非零元素。</p><p><b> 2 系統(tǒng)分析</b></p><p> 2.1設(shè)計函數(shù)建立稀疏矩陣及初始化值和輸出稀疏矩陣的值 </p><p&
7、gt; 本模塊要求設(shè)計函數(shù)建立稀疏矩陣并初始化。在創(chuàng)建稀疏矩陣時需要設(shè)計稀疏矩陣的加法和存儲方法,出現(xiàn)錯誤時能夠?qū)﹀e誤進行判別處理初始化稀疏矩陣都為空值。在設(shè)計輸出稀疏矩陣的值的函數(shù)時也要針對兩種不同的情況分別編制函數(shù)才能準確的輸出稀疏矩陣。在對稀疏矩陣進行初始化時只輸入非零元素的值和它所在的所在行及所在列。在對稀疏矩陣輸出時以矩陣的完整形式輸出。 </p><p> 2.2造函數(shù)并輸出最終稀疏矩陣 <
8、;/p><p> 本模塊要求設(shè)計加法函數(shù)對兩個矩陣進行運算并輸出最終的稀疏矩陣,操作后的結(jié)果矩陣的行、列數(shù)需要綜合多方面情況來確定。這些函數(shù)也是整個程序的難點需要靈活運用數(shù)組及指針的特點。</p><p><b> 3 概要設(shè)計</b></p><p><b> 3.1存儲結(jié)構(gòu)設(shè)計</b></p><
9、p> 以一維數(shù)組順序存放非零元素的行號、列號和數(shù)值,行號-1作為結(jié)束標志。稀疏矩陣的存儲類似于建立順序存儲稀疏矩陣的三元組表。假設(shè)A為一個稀疏矩陣,B為一個存儲對應于A矩陣生成的數(shù)組。用一個二重循環(huán)來判斷每個矩陣元素是否為零,若不為零,則將其行、列下標及其值存入到一維數(shù)組B中對應的元素中。</p><p> 3.2系統(tǒng)功能設(shè)計 </p><p> 設(shè)計稀疏矩陣的加法算法,假設(shè)兩
10、個稀疏矩陣A和B,它們均為m行n列,分別存放在數(shù)組A和B中,編寫矩陣的加法實現(xiàn)C=A+B的算法,C矩陣存放在數(shù)組C中。根據(jù)設(shè)計要求,首先要將一個稀疏矩陣對應存儲到一個一維數(shù)組中,然后在進行矩陣加法時依次掃描矩陣A和B的行列值,并以行優(yōu)先,當行列相同時,將第三個元素值相加的和以及行列號三個元素存入結(jié)果數(shù)組C中;不相同時,將A或B的三個元素直接存入結(jié)果數(shù)組中。</p><p><b> 4 詳細設(shè)計<
11、;/b></p><p> 4.1 稀疏矩陣的存儲</p><p> void(CreateMatrix(int A[m][n],int B[50])) //轉(zhuǎn)儲稀疏矩陣的算法</p><p> { int i,j,k=0;</p><p> for(i=0;i<m;i++) </p><p>
12、 for(j=0;j<n;j++) </p><p> if(A[i][j]!=0) {</p><p> B[k]=i;k++;</p><p> B[k]=j;k++;</p><p> B[k]=A[i][j];k++;</p><p><b> }</b></p&
13、gt;<p> B[k]=-1; //非零元素存儲結(jié)束</p><p><b> }</b></p><p> 4.2 稀疏矩陣的加法</p><p> void MatrixAdd(int A[max],int B[max],int C[max])</p><p><b>
14、{</b></p><p> int i=0,j=0,k=0;</p><p> while(A[i]!=-1 && B[j]!=-1) </p><p><b> {</b></p><p> if(A[i]==B[j]) //行相等</p><p>&
15、lt;b> {</b></p><p> if(A[i+1]==B[j+1]) //列相等</p><p><b> {</b></p><p> C[k]=A[i];</p><p> C[k+1]=A[i+1];</p><p> C[k+2]=A[i+2]-B
16、[j+2];</p><p><b> k=k+3;</b></p><p><b> i=i+3;</b></p><p><b> j=j+3;</b></p><p><b> }</b></p><p> else
17、 if(A[i+1]<B[j+1]) </p><p> { //B的列小于A的列,將A的三個元素直接存入C中</p><p> C[k]=A[i];</p><p> C[k+1]=A[i+1];</p><p> C[k+2]=A[i+2];</p><p><b> k=k+3;&l
18、t;/b></p><p><b> i=i+3;</b></p><p><b> }</b></p><p><b> else</b></p><p> { //B的列小于A的列,將B的三個元素直接存入C中</p><p> C[
19、k]=B[j];</p><p> C[k+1]=B[j+1];</p><p> C[k+2]=B[j+2];</p><p><b> k=k+3;</b></p><p><b> j=j+3;</b></p><p><b> }</b>
20、;</p><p><b> }</b></p><p> else if(A[i]<B[j])</p><p> { //A的行小于B的行,將A的三個元素直接存入C中</p><p> C[k]=A[i];</p><p> C[k+1]=A[i+1];</p>
21、<p> C[k+2]=A[i+2];</p><p><b> k=k+3;</b></p><p><b> i=i+3;</b></p><p><b> }</b></p><p><b> else</b></p>
22、<p> { //B的行小于A的行,將B的三個元素直接存入C中</p><p> C[k]=B[j];</p><p> C[k+1]=B[j+1];</p><p> C[k+2]=B[j+2];</p><p><b> k=k+3;</b></p><p><
23、b> j=j+3;</b></p><p><b> }</b></p><p><b> } //循環(huán)結(jié)束</b></p><p> if(A[i]==-1)</p><p> while(B[j]!=-1)</p><p> { //A結(jié)束
24、B還有元素,將B的所有元素直接存入C中</p><p> C[k]=B[j];</p><p> C[k+1]=B[j+1];</p><p> C[k+2]=B[j+2];</p><p><b> k=k+3;</b></p><p><b> j=j+3;</b&g
25、t;</p><p><b> }</b></p><p><b> else</b></p><p> while(A[i]!=-1)</p><p> { //B結(jié)束A還有元素,將A的所有元素直接存入C中</p><p> C[k]=A[i];</p&g
26、t;<p> C[k+1]=A[i+1];</p><p> C[k+2]=A[i+2];</p><p><b> k=k+3;</b></p><p><b> i=i+3;</b></p><p><b> }</b></p><
27、;p><b> C[k]=-1;</b></p><p><b> }</b></p><p><b> 5 程序代碼</b></p><p> #include<stdio.h></p><p> #define m 3 //用戶可根據(jù)需要定義
28、原始矩陣行數(shù)</p><p> #define n 3 //定義原始矩陣</p><p> #define max 50</p><p> void(CreateMatrix(int A[m][n],int B[50])) //轉(zhuǎn)儲稀疏矩陣的算法</p><p> { int i,j,k=0;</p><p&
29、gt; for(i=0;i<m;i++) </p><p> for(j=0;j<n;j++) </p><p> if(A[i][j]!=0) {</p><p> B[k]=i;k++;</p><p> B[k]=j;k++;</p><p> B[k]=A[i][j];k++;<
30、;/p><p><b> }</b></p><p> B[k]=-1; //非零元素存儲結(jié)束</p><p><b> }</b></p><p> void MatrixAdd(int A[max],int B[max],int C[max])</p><p&g
31、t;<b> {</b></p><p> int i=0,j=0,k=0;</p><p> while(A[i]!=-1 && B[j]!=-1) </p><p><b> {</b></p><p> if(A[i]==B[j]) //行相等</p>
32、;<p><b> {</b></p><p> if(A[i+1]==B[j+1]) //列相等</p><p><b> {</b></p><p> C[k]=A[i];</p><p> C[k+1]=A[i+1];</p><p> C[
33、k+2]=A[i+2]-B[j+2];</p><p><b> k=k+3;</b></p><p><b> i=i+3;</b></p><p><b> j=j+3;</b></p><p><b> }</b></p>&l
34、t;p> else if(A[i+1]<B[j+1]) </p><p> { //B的列小于A的列,將A的三個元素直接存入C中</p><p> C[k]=A[i];</p><p> C[k+1]=A[i+1];</p><p> C[k+2]=A[i+2];</p><p><b&
35、gt; k=k+3;</b></p><p><b> i=i+3;</b></p><p><b> }</b></p><p><b> else</b></p><p> { //B的列小于A的列,將B的三個元素直接存入C中</p>
36、<p> C[k]=B[j];</p><p> C[k+1]=B[j+1];</p><p> C[k+2]=B[j+2];</p><p><b> k=k+3;</b></p><p><b> j=j+3;</b></p><p><b>
37、; }</b></p><p><b> }</b></p><p> else if(A[i]<B[j])</p><p> { //A的行小于B的行,將A的三個元素直接存入C中</p><p> C[k]=A[i];</p><p> C[k+1]=A[i+1]
38、;</p><p> C[k+2]=A[i+2];</p><p><b> k=k+3;</b></p><p><b> i=i+3;</b></p><p><b> }</b></p><p><b> else</b&
39、gt;</p><p> { //B的行小于A的行,將B的三個元素直接存入C中</p><p> C[k]=B[j];</p><p> C[k+1]=B[j+1];</p><p> C[k+2]=B[j+2];</p><p><b> k=k+3;</b></p>
40、<p><b> j=j+3;</b></p><p><b> }</b></p><p><b> } //循環(huán)結(jié)束</b></p><p> if(A[i]==-1)</p><p> while(B[j]!=-1)</p><p
41、> { //A結(jié)束B還有元素,將B的所有元素直接存入C中</p><p> C[k]=B[j];</p><p> C[k+1]=B[j+1];</p><p> C[k+2]=B[j+2];</p><p><b> k=k+3;</b></p><p><b> j
42、=j+3;</b></p><p><b> }</b></p><p><b> else</b></p><p> while(A[i]!=-1)</p><p> { //B結(jié)束A還有元素,將A的所有元素直接存入C中</p><p> C[k]=
43、A[i];</p><p> C[k+1]=A[i+1];</p><p> C[k+2]=A[i+2];</p><p><b> k=k+3;</b></p><p><b> i=i+3;</b></p><p><b> }</b>&l
44、t;/p><p><b> C[k]=-1;</b></p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> int E[m][n],F[m][n],A[max],B[
45、max],C[max];</p><p> int i,j,k;</p><p> for(i=0;i<m;i++) //輸入E矩陣的所有元素</p><p> for(j=0;j<n;j++)</p><p> scanf("%d",&E[i][j]);</p><p&g
46、t; for(i=0;i<m;i++) //輸入F元素的所有元素</p><p> for(j=0;j<n;j++)</p><p> scanf("%d",&F[i][j]);</p><p> CreateMatrix(E,A); //E矩陣的非零元素存儲到一維數(shù)組A中</p><p>
47、 CreateMatrix(F,B); //F矩陣的非零元素存儲到一維數(shù)組B中</p><p> MatrixAdd(A,B,C); //A,B相加存入C中</p><p> i=0;j=0;k=0;</p><p> printf("A數(shù)組內(nèi)容如下:\n");</p><p> while(A[i]!=-
48、1)</p><p> { //輸出A中內(nèi)容</p><p> printf("%5d,%5d,%5d\n",A[i],A[i+1],A[i+2]);</p><p><b> i=i+3;</b></p><p><b> }</b></p><
49、p> printf("B數(shù)組內(nèi)容如下:\n");</p><p> while(B[j]!=-1)</p><p> { //輸出B中內(nèi)容</p><p> printf("%5d,%5d,%5d\n",B[j],B[j+1],B[j+2]);</p><p><b> j=
50、j+3;</b></p><p><b> }</b></p><p> printf("C數(shù)組內(nèi)容如下:\n");</p><p> while(C[k]!=-1)</p><p> { //輸出C中內(nèi)容</p><p> printf("
51、%5d,%5d,%5d\n",C[k],C[k+1],C[k+2]);</p><p><b> k=k+3;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 6 運行與測試</b&
52、gt;</p><p><b> 7 總結(jié)與心得</b></p><p> 在本次實驗中遇到了很多問題,一開始的時候程序有很多錯誤,花了很多時間才調(diào)試成功。慢慢的把一些錯誤找出來并改正了。我認為學習最重要的是發(fā)現(xiàn)問題,解決問題。自己解決不了的和同學一起解決,這樣才能學到更多東西。本次試驗讓我對稀疏矩陣的認識進一步加深了。</p><p>&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(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ù)據(jù)結(jié)構(gòu)課程設(shè)計論文----稀疏矩陣的轉(zhuǎ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è)計
- 稀疏矩陣的轉(zhuǎn)置論文-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計論文
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--基本稀疏矩陣運算的運算器
- 數(shù)據(jù)結(jié)構(gòu)-矩陣相關(guān)操作的課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-圖的鄰接矩陣
- 數(shù)據(jù)結(jié)構(gòu)實驗報告(稀疏矩陣)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
評論
0/150
提交評論