




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精品文檔數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告 設(shè)計題目:稀疏矩陣專業(yè):計算機(jī)科技院系:計算機(jī)學(xué)院姓名: xxxxxxx學(xué)號: xxxxxxxx時間:2021年9月22日目錄一 需求分析- 3 1. 問題描述- 32. 根本要求- 33 實現(xiàn)提示- 3二 概要設(shè)計-3三 詳細(xì)設(shè)計-4四 調(diào)試分析- 10五 用戶手冊-11一 需求分析1.【問題描述】 稀疏矩陣是指那些多數(shù)元素為零的矩陣。利用“稀疏特點進(jìn)行存儲和計算可以大大節(jié)省存儲空間,提高計算效率。實現(xiàn)一個能進(jìn)行稀疏矩陣根本運算的運算器。2.【根本要求】 以“帶行邏輯鏈接信息的三元組順序表示稀疏矩陣,實現(xiàn)兩個矩陣相加,相減和相乘的運算,稀疏矩陣的輸入形式采用三元
2、組表示,而運算結(jié)果的矩陣那么以通常的陣列形式列出。3.【實現(xiàn)提示】1首先應(yīng)輸入矩陣的行數(shù)和列數(shù),并判別給出的兩個矩陣的行,列數(shù)對于所要求作的運算是否匹配,可設(shè)矩陣的行數(shù)和列數(shù)均不超過20。2程序可以對三元組的輸入順序加以限制,例如,按行優(yōu)先。3在用三元組表示稀疏矩陣時,相加或相減所得結(jié)果矩陣應(yīng)該另生成,乘積矩陣也可用二維數(shù)組存放二 概要設(shè)計1. 設(shè)定數(shù)組的抽象數(shù)據(jù)類型定義:ADT SparseMatrix數(shù)據(jù)對象:D= m和n分別稱為矩陣的行數(shù)和列數(shù)數(shù)據(jù)關(guān)系:R=Row,ColRow=<ai,j,ai,j+1 >|1<=i<=m,a<=j<=n-1 Col=
3、<ai,j,ai+1,j>|1<=i<=m-1,a<=j<=n 根本操作: CreateSMatrix(&M); 操作結(jié)果:創(chuàng)立稀疏矩陣M。 DestorySMatrix(&M); 初始條件:稀疏矩陣M存在。 操作結(jié)果:銷毀稀疏矩陣M。 PrintSMatrix(M); 初始條件:稀疏矩陣M存在。 操作結(jié)果: 輸出稀疏矩陣M。 CopySMatrix(M,&T); 初始條件:稀疏矩陣M存在。 操作結(jié)果:由稀疏矩陣M復(fù)制得到T。 AddSMatrix(M,N,&Q); 初始條件:稀疏矩陣M與N的行數(shù)和列數(shù)對應(yīng)相等。 操作結(jié)果:求
4、稀疏矩陣的和Q=M+N。 SubtSMatrix(M,N,&Q); 初始條件:稀疏矩陣M與N的行數(shù)和列數(shù)對應(yīng)相等。 操作結(jié)果:求稀疏矩陣的差Q=M-N。 MultSMatrix(M,N,&Q); 初始條件:稀疏矩陣M的列數(shù)等于N的行數(shù)。 操作結(jié)果:求稀疏矩陣乘積Q=M*N。 TransposeSMatrix(M,&T); 初始條件:稀疏矩陣M 存在。 操作結(jié)果:求稀疏矩陣M的轉(zhuǎn)置矩陣T。ADT SparseMatrix2本程序包含的模塊1void main()初始化;do 接收命令;處理命令;while(命令!=退出);2稀疏矩陣模塊實現(xiàn)稀疏矩陣抽象數(shù)據(jù)類型。3稀疏矩陣
5、求值模塊實現(xiàn)稀疏矩陣求值抽象數(shù)據(jù)類型。 稀疏矩陣求值模塊包括:矩陣相加模塊AddRLSMatrix();矩陣相減模塊SubRLSMatrix();相乘模塊MulTSMatrix();三 詳細(xì)設(shè)計#include<stdio.h>#include<stdlib.h>#define MAXSIZE 20#define MAXRC 20typedef struct /稀疏矩陣的三元組順序表存儲表示int i,j; /該非零元的行下標(biāo)和列下標(biāo)int e;Triple;typedef structTriple dataMAXSIZE+1; /非零元三元組表,data0未用int
6、rposMAXRC+1; /各行第一個非零元的位置表int mu,nu,tu; /矩陣的行數(shù)列數(shù)和非零元的個數(shù)RLSMatrix;void CreateSMatrix(RLSMatrix *T) /輸入創(chuàng)立稀疏矩陣int k;printf(" n 請輸入矩陣行數(shù)、列數(shù)及非零元個數(shù): ");scanf("%d%d%d",&T->mu,&T->nu,&T->tu);printf("n");if(T->tu>MAXSIZE|T->mu>21)printf(" 非零個
7、數(shù)超出定義范圍!出錯!");exit(0);for(k=1;k<=T->tu;k+)printf(" 請輸入第%d個非零元素的行數(shù),列數(shù)及其值: ",k);scanf("%d%d%d",&T->datak.i,&T->datak.j,&T->datak.e);void AddRLSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) /稀疏矩陣相加int p,q,k=1;if(M.mu!=N.mu|M.nu!=N.nu)printf(" 你的輸入
8、不滿足矩陣相加的條件!n");exit(1);Q->mu=M.mu;Q->nu=M.nu;for(p=1,q=1;p<=M.tu&&q<=N.tu;)if(M.datap.i=N.dataq.i)if(M.datap.j=N.dataq.j)Q->datak.i=M.datap.i;Q->datak.j=M.datap.j;Q->datak.e=M.datap.e+N.dataq.e;p+;q+;k+;else if(M.datap.j<N.dataq.j)Q->datak.i=M.datap.i;Q->da
9、tak.j=M.datap.j;Q->datak.e=M.datap.e;k+;p+;else if(M.datap.j>N.dataq.j)Q->datak.i=N.dataq.i;Q->datak.j=N.dataq.j;Q->datak.e=N.dataq.e;k+;p+;else if(M.datap.i<N.dataq.i)Q->datak.i=M.datap.i;Q->datak.j=M.datap.j;Q->datak.e=M.datap.e;k+;p+;else if(M.datap.i>N.dataq.i)Q->
10、;datak.i=N.dataq.i;Q->datak.j=N.dataq.j;Q->datak.e=N.dataq.e;k+;q+;if(p!=M.tu+1)for(;p<=M.tu;p+)Q->datak.i=M.datap.i;Q->datak.j=M.datap.j; Q->datak.e=M.datap.e;k+;if(q!=N.tu+1)for(;q<=N.tu;q+)Q->datak.i=N.dataq.i;Q->datak.j=N.dataq.j;Q->datak.e=N.dataq.e;k+;void SubRLSM
11、atrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) /稀疏矩陣相減int p,q,k=1;if(M.mu!=N.mu|M.nu!=N.nu)printf(" 你的輸入不滿足矩陣相減的條件!n");exit(1);Q->mu=M.mu;Q->nu=M.nu;for(p=1,q=1;p<=M.tu&&q<=N.tu;)if(M.datap.i=N.dataq.i)if(M.datap.j=N.dataq.j)Q->datak.i=M.datap.i;Q->datak.j=M.datap.j;
12、Q->datak.e=M.datap.e-N.dataq.e;p+;q+;k+;else if(M.datap.j<N.dataq.j)Q->datak.i=M.datap.i;Q->datak.j=M.datap.j;Q->datak.e=M.datap.e;k+;p+;else if(M.datap.j>N.dataq.j)Q->datak.i=N.dataq.i;Q->datak.j=N.dataq.j;Q->datak.e=-N.dataq.e;k+;p+;else if(M.datap.i<N.dataq.i)Q->d
13、atak.i=M.datap.i;Q->datak.j=M.datap.j;Q->datak.e=M.datap.e;k+;p+;else if(M.datap.i>N.dataq.i)Q->datak.i=N.dataq.i;Q->datak.j=N.dataq.j;Q->datak.e=-N.dataq.e;k+;q+;if(p!=M.tu+1)for(;p<=M.tu;p+)Q->datak.i=M.datap.i;Q->datak.j=M.datap.j; Q->datak.e=M.datap.e;k+;if(q!=N.tu+
14、1)for(;q<=N.tu;q+)Q->datak.i=N.dataq.i;Q->datak.j=N.dataq.j;Q->datak.e=-N.dataq.e;k+;int MulTSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) /稀疏矩陣相乘int ccol=0,tp,brow,t,arow,p,q,i;int ctempMAXSIZE+1;if(M.nu!=N.mu) printf(" 你的輸入不滿足矩陣相乘的條件!n");return 0; Q->mu=M.mu;Q->nu=N.nu;
15、Q->tu=0;if(M.tu*N.tu!=0)for(arow=1;arow<=M.mu;+arow)for(i=1;i<=N.nu;i+)ctempi=0; Q->rposarow=Q->tu+1;if(arow<M.mu) tp=M.rposarow+1;else tp=M.tu+1;for(p=M.rposarow;p<tp;+p)brow=M.datap.j;if(brow<N.mu) t=N.rposbrow+1;else t=N.tu+1;for(q=N.rposbrow;q<t;+q)ccol=N.dataq.j;ctemp
16、ccol+=M.datap.e*N.dataq.e;for(ccol=1;ccol<=Q->nu;+ccol)if(ctempccol)if(+Q->tu>MAXSIZE) return 0;Q->dataQ->tu.i=arow;Q->dataQ->tu.j=ccol;Q->dataQ->tu.e=ctempccol;return 1;void PrintSMatrix(RLSMatrix Q) /輸出稀疏矩陣int k=1,row,line;printf("n運算結(jié)果: ");if(Q.tu=0) printf
17、("0");elsefor(row=1;row<=Q.mu;row+)for(line=1;line<=Q.nu;line+)if(Q.datak.i=row&&Q.datak.j=line)printf("%d ",Q.datak+.e);else printf("0 ");printf("nt ");void main()RLSMatrix M,N,Q;int i;system("cls");printf(" n");printf("
18、 必做題,稀疏矩陣運算器 n");printf(" 姓名:xxxxx n");printf(" 學(xué)號:xxxxxxxxxxxx n");printf(" n");doprintf("n");printf(" 歡送進(jìn)入稀疏矩陣運算器 n");printf(" - n");printf(" 1.矩陣相加 n");printf(" 2.矩陣相減 n");printf(" 3.矩陣相乘 n");printf(" 4.退出系統(tǒng) n");printf("n");printf(">>>>>> 請選擇功能(1-4): ");scanf("%d",&i);if(i=4) goto end;else printf("n 請輸入第一個矩陣M:n"); CreateSMatrix(&M); printf("n 請輸入第二
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年5G網(wǎng)絡(luò)通信設(shè)備采購合同標(biāo)準(zhǔn)
- 2025年醋酸乙烯酯項目建議書
- 2025年摻混肥項目合作計劃書
- 2025年本地網(wǎng)傳輸系統(tǒng)項目合作計劃書
- 強(qiáng)化法治教育促進(jìn)遵紀(jì)守法計劃
- 學(xué)習(xí)困難學(xué)生支持方案計劃
- 水庫管理與調(diào)度方案計劃
- 選擇合適的理財工具計劃
- 2025年金屬門窗及類似制品項目發(fā)展計劃
- 2025年中國顯控系統(tǒng)行業(yè)供需態(tài)勢、競爭格局及投資前景分析報告(智研咨詢)
- NB/T 11526-2024煤礦微震監(jiān)測系統(tǒng)通用技術(shù)條件
- 2025年福建長汀金龍稀土有限公司招聘筆試參考題庫含答案解析
- 2024年濟(jì)南護(hù)理職業(yè)學(xué)院高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 四川省綿陽市2025屆高三第二次診斷性考試英語試題(含答案無聽力原文及音頻)
- 貴州省貴陽市普通中學(xué)2024-2025學(xué)年高二上學(xué)期期末監(jiān)測歷史試題(含答案)
- 2025年八省適應(yīng)性 歷史試卷(西北卷)
- Python金融數(shù)據(jù)挖掘與分析實戰(zhàn)課程教案教學(xué)教案
- 《企業(yè)償債能力存在的問題及優(yōu)化建議:以S地產(chǎn)公司為例》9500字(論文)
- 2025年上半年水利部長江水利委員會事業(yè)單位招聘68人(湖北武漢)重點基礎(chǔ)提升(共500題)附帶答案詳解
- (2024)云南省公務(wù)員考試《行測》真題及答案解析
- 地方政府專項發(fā)債項目培訓(xùn)課件
評論
0/150
提交評論