資源描述:
《稀疏矩陣快速轉(zhuǎn)置 數(shù)據(jù)結(jié)構(gòu)實驗報告》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、南昌航空大學(xué)實驗報告課程名稱:數(shù)據(jù)結(jié)構(gòu)實驗名稱:實驗五稀疏矩陣的存儲和快速轉(zhuǎn)置班級:080611學(xué)生姓名:學(xué)號:08指導(dǎo)教師評定:簽名:題目:假設(shè)稀疏矩陣A采用三元組表表示,編寫程序?qū)崿F(xiàn)該矩陣的快速轉(zhuǎn)置要求:輸入一個稀疏矩陣A,由程序?qū)⑵滢D(zhuǎn)換成三元組表存儲;轉(zhuǎn)置后的三元組表,由程序?qū)⑵滢D(zhuǎn)換成矩陣形式后輸出。一、需求分析1.用戶可以根據(jù)自己的需求輸入任意一個稀疏矩陣,通過程序?qū)⑵滢D(zhuǎn)換成三元組存儲方式;2.并且能夠完成矩陣的轉(zhuǎn)置功能,要求需要使用的方法是快速轉(zhuǎn)置的方法。3.最后要夠顯示原矩陣和轉(zhuǎn)置后的矩陣讓用戶能進行比較。4.程序執(zhí)行的命令包括:(
2、1)構(gòu)造稀疏矩陣M(2)求轉(zhuǎn)轉(zhuǎn)矩陣T(3)顯示(打?。┚仃嚩⒏乓O(shè)計⒈為實現(xiàn)上述算法,需要線性表的抽象數(shù)據(jù)類型:ADTSparseMatrix{數(shù)據(jù)對象:D={aij:
3、aij∈TermSet,i=1…m,m≥0,j=1…n,n≥0m和n分別成為矩陣的行數(shù)和列數(shù)}數(shù)據(jù)關(guān)系:R={Row,Col}Row={
4、1≤i≤m,1≤j≤n-1}Col={
5、1≤i≤m-1,1≤j≤n}基本操作:CreateSMtrix(&M)操作結(jié)果:創(chuàng)建稀疏矩陣M。DestroySMaix(&M)初始條件:稀疏矩陣M
6、已存在。操作結(jié)果:銷毀稀疏矩陣M。PrintSMatrix(L)初始條件:稀疏矩陣M已經(jīng)存在。操作結(jié)果:輸出稀疏矩陣M。CopySMatrix(M,&T)初始條件:稀疏矩陣M已經(jīng)存在。操作結(jié)果:由稀疏矩陣M復(fù)制得到T。TransposeSMatrix(M,&T)初始條件:稀疏矩陣M已經(jīng)存在。操作結(jié)果:求稀疏矩陣M的轉(zhuǎn)轉(zhuǎn)矩陣T。7}ADTSparseMatrix2.本程序有三個模塊:⑴主程序模塊main(){初始化;{接受命令;顯示結(jié)果;}}⑵矩陣壓縮存儲單元模塊:實現(xiàn)鏈表抽象數(shù)據(jù)類型操作,即函數(shù)的定義模塊;三、詳細(xì)設(shè)計⒈元素類型,結(jié)點類型typ
7、edefstruct{inti,j;inte;}Triple;typedefstruct{Tripledata[MAXSIZE+1];intmu,nu,tu;}Tsmatrix;2.對抽象數(shù)據(jù)類型中的部分基本操作的偽碼算法如下:Tsmatrix*creatarray(Tsmatrix*M){intm,n,p=1;intc;printf("pleaseinputthearrayA:");for(m=1;m<=a;m++)for(n=1;n<=b;n++){scanf("%d",&c);if(c!=0){M->data[p].e=c;M->da
8、ta[p].i=m;M->data[p].j=n;p++;}}M->tu=p;M->mu=a;M->nu=b;printf("yuanlaisanyuanzudebiaoshiwei:");for(m=1;m<=M->tu;m++)printf("%3d%3d%3dt",M->data[m].i,M->data[m].j,M->data[m].e);printf("");returnM;}/*三元組快速轉(zhuǎn)置*/Tsmatrix*fasttrans(Tsmatrix*M,Tsmatrix*T)7{intp,col,q,t,m;int
9、num[100];intcpot[100];T->mu=M->nu;T->nu=M->mu;T->tu=M->tu;if(T->tu!=0){for(col=1;col<=M->nu;col++)num[col]=0;for(t=1;t<=M->tu;t++)++num[M->data[t].j];cpot[1]=1;for(col=2;col<=M->nu;col++)cpot[col]=cpot[col-1]+num[col-1];for(p=1;p<=M->tu;++p){col=M->data[p].j;q=cpot[col];T->d
10、ata[q].i=M->data[p].j;T->data[q].j=M->data[p].i;T->data[q].e=M->data[p].e;++cpot[col];}}printf("zhuanzhihoudesanyuanzubiaoshiwei:");for(m=1;m<=T->tu;m++)printf("%3d%3d%3dt",T->data[m].i,T->data[m].j,T->data[m].e);printf("");returnT;}/*輸出三元組函數(shù)*/voidprint(Tsmatrix*T
11、,intx,inty){intm,n,p=1;intd;for(m=1;m<=x;m++){printf("");for(n=1;n<=y;n++