稀疏矩陣的建立與轉(zhuǎn)置_第1頁
稀疏矩陣的建立與轉(zhuǎn)置_第2頁
稀疏矩陣的建立與轉(zhuǎn)置_第3頁
稀疏矩陣的建立與轉(zhuǎn)置_第4頁
稀疏矩陣的建立與轉(zhuǎn)置_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、實驗2 稀疏矩陣的建立與轉(zhuǎn)置一、實驗?zāi)康恼莆仗厥饩仃嚨拇鎯筒僮魉惴?。二、實驗?nèi)容及問題描述實現(xiàn)用三元組保存稀疏矩陣并實現(xiàn)矩陣轉(zhuǎn)置的算法。三、實驗步驟1. 定義稀疏矩陣的三元組形式的存儲結(jié)構(gòu)。2. 實現(xiàn)三元組矩陣的傳統(tǒng)轉(zhuǎn)置算法。3. 實現(xiàn)三元組矩陣的快速轉(zhuǎn)置算法。4. 輸入矩陣非零元素,測試自己完成的算法。四、程序流程圖五、概要設(shè)計矩陣是很多的科學(xué)與工程計算中研究的數(shù)學(xué)對象。在此,我們感興趣的是,從數(shù)學(xué)結(jié)構(gòu)這門學(xué)科著眼,如何存儲矩陣的元從而使矩陣的各種運算有效的進行。 本來,用二維數(shù)組存儲矩陣,在邏輯上意義是很明確的,也很容易理解,操作也很容易和方便。但是在數(shù)值分析中經(jīng)常出現(xiàn)一些階數(shù)很高的矩陣

2、,同時,在矩陣中又有很多值相同或者都為零的元素,可以對這種矩陣進行壓縮存儲:對多個值相同的元素只分配一個存儲空間;對零元素不分配空間。稀疏矩陣的定義是一個模糊的定義:即非零元個數(shù)較零元個數(shù)較少的矩陣。例如下圖所示的矩陣為一個稀疏矩陣。 為了實現(xiàn)稀疏矩陣的這種存儲結(jié)構(gòu),引入三元組這種數(shù)據(jù)結(jié)構(gòu)。三元組的線性表順存儲形式如下圖:六、詳細設(shè)計sanyuanzu.h 頭文件#define max 100typedef struct int row,col; int e;Triple;/定義三元組typedef struct Triple datamax; int mu,nu,tu;TSMatrix;/*

3、定義三元組的稀疏矩陣*/ void creat( TSMatrix &M) ; void fasttrans(TSMatrix A,TSMatrix &B); void printfx(TSMatrix x);sanyuanzu.cpp 文件#include#includesanyuanzu.h/*建立三元組的稀疏矩陣*/ void creat( TSMatrix &M) printf(請輸入稀疏矩陣的行數(shù):); scanf(%d,&M.mu); printf(請輸入稀疏矩陣的列數(shù):); scanf(%d,&M.nu); printf(請輸入矩陣中非零元素的個數(shù):); scanf(%d,&M.

4、tu); int i; printf(請輸入這%d 個元素的行號和列號及其元素的值:/n,M.tu); for(i = 1; i = M.tu; i+)scanf(%d %d %d,&M.datai.row,&M.datai.col,&M.datai.e);/*實現(xiàn)三元組的矩陣轉(zhuǎn)置的函數(shù)*/ void fasttrans(TSMatrix A,TSMatrix &B) int col,cpotmax,nummax,t,p,q;/*初始化矩陣B*/ B.mu=A.nu; B.nu=A.mu; B.tu=A.tu; if(B.tu) for(col=1;col=A.nu;+col) numcol=

5、0;/*初始化每一列非零元的個數(shù)*/ for(t=1;t=A.tu;+t) +numA.datat.col;/*計算每一列非零元的個數(shù)*/ cpot1=1; for(col=2;col=A.nu;+col) cpotcol=cpotcol-1+numcol-1;/計算矩陣A 每一列第一個非零元在B.data 中的位置/*實現(xiàn)對A 中的每一個非零元進行轉(zhuǎn)置*/ for(p=1;p=A.tu;+p) col=A.datap.col; q=cpotcol; B.dataq.row=A.datap.col; B.dataq.col=A.datap.row; B.dataq.e=A.datap.e; +

6、cpotcol; /*稀疏矩陣的輸出*/ void printfx(TSMatrix x) int i,j; for(j=1;j=x.tu;j+) for(i=1;i=x.mu;i+) if(x.dataj.row=i)printf(%d %d %d/n,x.dataj.row,x.dataj.col,x.dataj.e); main.cpp 文件#include#includesanyuanzu.cpp/主函數(shù) int main(void) TSMatrix t,s; creat(t); printf(你所輸入的稀疏矩陣為:/n); printfx(t); fasttrans(t,s); p

7、rintf(轉(zhuǎn)置后的稀疏矩陣為:/n); printfx(s); return 0; 七、調(diào)試報告八、分析與遇到的問題(1) 創(chuàng)建稀疏矩陣時,不懂如何用三元組表示元素的輸出; (2)需要注意矩陣運算中的特殊狀況, 稀疏矩陣相加時,忘記對應(yīng)元素相加為0時,在稀疏矩陣中不表示; (3) 矩陣相加時,第一個矩陣的行列數(shù)要和第二個矩陣的行列數(shù)相等;(4)輸出矩陣時,輸出界面不整齊。9、 用戶使用說明(1) 運行程序,首先會看到一個提供選擇的界面,輸入相應(yīng)的序號實現(xiàn)相應(yīng)的功能;(2) 在進行相應(yīng)的功能之后按提示要求一三元組形式輸入相應(yīng)矩陣。(注意:每個數(shù)據(jù)之間用空格隔開);(3) 輸入相應(yīng)矩陣之后會輸出最后的運算結(jié)果;(4) 輸出結(jié)果運算之后會可按任意鍵返回。10、 心得體會 這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的制作使我對數(shù)據(jù)結(jié)構(gòu)和C語言的理解加深,也使我自己認識到自己很多不足之處。我發(fā)現(xiàn)自己再處理稍微具體的程序時顯得無從下手以前學(xué)習(xí)的知識只是理論性的知識,并沒有真正實踐過,當(dāng)我通過網(wǎng)上查詢、復(fù)習(xí)知識后才對編程程序有了初步思路

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論