資源描述:
《稀疏矩陣快速轉(zhuǎn)置 數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、南昌航空大學(xué)實(shí)驗(yàn)報(bào)告課程名稱(chēng):數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)名稱(chēng):實(shí)驗(yàn)五稀疏矩陣的存儲(chǔ)和快速轉(zhuǎn)置班級(jí):080611學(xué)生姓名:學(xué)號(hào):08指導(dǎo)教師評(píng)定:簽名:題目:假設(shè)稀疏矩陣A采用三元組表表示,編寫(xiě)程序?qū)崿F(xiàn)該矩陣的快速轉(zhuǎn)置要求:輸入一個(gè)稀疏矩陣A,由程序?qū)⑵滢D(zhuǎn)換成三元組表存儲(chǔ);轉(zhuǎn)置后的三元組表,由程序?qū)⑵滢D(zhuǎn)換成矩陣形式后輸出。一、需求分析1.用戶(hù)可以根據(jù)自己的需求輸入任意一個(gè)稀疏矩陣,通過(guò)程序?qū)⑵滢D(zhuǎn)換成三元組存儲(chǔ)方式;2.并且能夠完成矩陣的轉(zhuǎn)置功能,要求需要使用的方法是快速轉(zhuǎn)置的方法。3.最后要夠顯示原矩陣和轉(zhuǎn)置后的矩陣讓用戶(hù)能進(jìn)行比較。4.程序執(zhí)行的命令包括:(
2、1)構(gòu)造稀疏矩陣M(2)求轉(zhuǎn)轉(zhuǎn)矩陣T(3)顯示(打?。┚仃嚩?、概要設(shè)計(jì)⒈為實(shí)現(xiàn)上述算法,需要線性表的抽象數(shù)據(jù)類(lèi)型:ADTSparseMatrix{數(shù)據(jù)對(duì)象: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é)果:銷(xiāo)毀稀疏矩陣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.本程序有三個(gè)模塊:⑴主程序模塊main(){初始化;{接受命令;顯示結(jié)果;}}⑵矩陣壓縮存儲(chǔ)單元模塊:實(shí)現(xiàn)鏈表抽象數(shù)據(jù)類(lèi)型操作,即函數(shù)的定義模塊;三、詳細(xì)設(shè)計(jì)⒈元素類(lèi)型,結(jié)點(diǎn)類(lèi)型typ
7、edefstruct{inti,j;inte;}Triple;typedefstruct{Tripledata[MAXSIZE+1];intmu,nu,tu;}Tsmatrix;2.對(duì)抽象數(shù)據(jù)類(lèi)型中的部分基本操作的偽碼算法如下: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++