版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四章數(shù)組內(nèi)容提要數(shù)組的定義、表示與實(shí)現(xiàn)矩陣的壓縮存儲(chǔ)特殊矩陣稀疏矩陣數(shù)組基本定義數(shù)組的維數(shù)一旦被定義,就不再改變二維數(shù)組也可以看作元素類(lèi)型為一維數(shù)組的一維數(shù)組類(lèi)型Typedefelemtypearray2[m][n];等價(jià)于Typedefelemtypearray1[n];//先定義一個(gè)一維數(shù)組Typedefarray1array2[m];數(shù)組的順序存儲(chǔ)方式由于存儲(chǔ)單元是一維的結(jié)構(gòu),而數(shù)組是個(gè)多維的結(jié)構(gòu),那么用一組連續(xù)存儲(chǔ)單元存放數(shù)組的元素時(shí),映射問(wèn)題是關(guān)鍵。行優(yōu)先存儲(chǔ):將數(shù)組按行向量排列,即第i+1行緊接在第i行后。(C語(yǔ)言采用這種方式)列優(yōu)先存儲(chǔ):將數(shù)組元素按列向量排列。a00a01…a0na10a11..a20a00a10…an0a01a11..an1數(shù)組元素的存儲(chǔ)地址★
二維數(shù)組(m*n)Loc(i,j)=Loc(0,0)+(i*n+j)*s0<i≤m-1,0<j≤n-1(適用于數(shù)組下標(biāo)規(guī)定從0起始的編程語(yǔ)言)三維數(shù)組(m*n*p)Loc[i][j][k]=Loc[0][0][0]+(i*(n*p)+j*p+k)*s0<i≤m-1,0<j≤n-1,0<k≤p-1
下面是數(shù)組的順序存儲(chǔ)表示和實(shí)現(xiàn)typedefstruct{//數(shù)組元素基址,由InitArray函數(shù)來(lái)分配
ElemType*base;
//數(shù)組維數(shù)
intdim;//數(shù)組維界基址,存放每一維的長(zhǎng)度
int *bounds;
//數(shù)組映象函數(shù)常量基址,由InitArray分配
int*constants;}Array;數(shù)組的操作數(shù)組除了結(jié)構(gòu)的初始化和銷(xiāo)毀操作之外,只有兩個(gè)操作:給定一組下標(biāo),讀取相應(yīng)的數(shù)據(jù)元素
GetValue(A,&e,i,j)給定一組下標(biāo),修改相應(yīng)數(shù)據(jù)元素中的某一個(gè)或幾個(gè)數(shù)據(jù)項(xiàng)的值
ChangeValue(A,e,i,j)矩陣的壓縮存儲(chǔ)矩陣是很多科學(xué)與工程計(jì)算問(wèn)題中研究的數(shù)學(xué)對(duì)象。如何存儲(chǔ)矩陣的元,從而使矩陣的各種運(yùn)算能有效地進(jìn)行?這是很重要的。為了節(jié)約矩陣存儲(chǔ)的空間,往往對(duì)一些特殊矩陣進(jìn)行壓縮存儲(chǔ)——多個(gè)值相同的元只分配一個(gè)存儲(chǔ)空間;對(duì)零元不分配空間矩陣常識(shí)特殊矩陣——數(shù)值相同的元素或零元素在矩陣中的分布有一定規(guī)律對(duì)稱矩陣:兩種對(duì)稱方向下/上三角矩陣:右上/左下三角(不包括對(duì)角線)中的元均為常數(shù)或0稀疏矩陣稀疏因子=非0元的個(gè)數(shù)/(m×n)當(dāng)稀疏因子≦0.05時(shí)的矩陣被稱為稀疏矩陣對(duì)稱矩陣的壓縮存儲(chǔ)對(duì)稱矩陣的特點(diǎn):aij=aji(1<=i,j<=n)分配方法:為每一對(duì)對(duì)稱元分配一個(gè)存儲(chǔ)空間例:若以一維數(shù)組作為n階對(duì)稱矩陣的存儲(chǔ)結(jié)構(gòu),以行序?yàn)橹餍颍鎯?chǔ)下三角(包括主對(duì)角線)矩陣。則數(shù)組與矩陣中的aij存在一一對(duì)應(yīng)的關(guān)系an,n..an,1…a31a22a21a11K=012n(n-1)/2n(n+1)/2-1j<i
1i-+2)1j-(jj≥i
1j-+2)1i-(i=k當(dāng)當(dāng)下標(biāo)轉(zhuǎn)換算法intij_to_k(inti,intj){If(i<1||j<1)return(-1);If(i>=j)return(i(i-1)/2+j-1);Elsereturn(j(j-1)/2+i-1);}輸入并存儲(chǔ)對(duì)稱矩陣的算法VoidMyint(elemtypea[],intn);{for(k=0;k<n(n+1)/2;k++)Scanf(&a[k]);}讀取對(duì)稱矩陣中某元素的算法Statusgetelem(elemtypea[],inti,intj,elemtype&e){k=ij_to_k(i,j);
if(k>=0){e=a[k];returnOK;}elsereturnERROR;}輸出打印對(duì)稱矩陣的算法Voidprint(elemtypeA[];inti;intn){for(inti=1;i<=n;i++){printf(“\n);for(j=1;j<=n;j++){getelem(A,i,j,e);printf(“%d”,e);}}}//行為主序稀疏矩陣的存儲(chǔ)
定義:如果一個(gè)m*n的矩陣中非零元素比零元素的個(gè)數(shù)少得多,且非零元素的分布沒(méi)有規(guī)律壓縮存儲(chǔ):只存儲(chǔ)非零元素由一個(gè)三元組能夠惟一確定矩陣的每個(gè)非零元——三元組順序表
//非零元個(gè)數(shù)的最大值為mu*nu*0.05,假設(shè)為40#defineMAXSIZE40
typedefstruct{introw,col;ElemTypevalue;}Triple;typedefstruct{
//data:非零元三元組表,data[0]用來(lái)放置總行數(shù)、總列數(shù)和非零元素個(gè)數(shù)
Tripledata[MAXSIZE+1];
//矩陣的行數(shù)、列數(shù)和非零元個(gè)數(shù)
intmu,nu,tu;//tu表示稀疏矩陣中的非零元素的個(gè)數(shù)}TSMatrix;typedefstruct{introw,col;ElemTypevalue;}Triple;typedefstruct{Tripledata[MAXSIZE+1];……稀疏矩陣的轉(zhuǎn)置運(yùn)算
對(duì)于一個(gè)m*n的矩陣M,它的轉(zhuǎn)置矩陣T是一個(gè)n*m的矩陣轉(zhuǎn)置方法:矩陣行列值轉(zhuǎn)換,原有的m*n矩陣M要變?yōu)閚*m的矩陣T。每個(gè)三元組中的row和col位置互換,即原來(lái)的Aij對(duì)應(yīng)Bji三元組A的排列是以原矩陣的行號(hào)為主序,而三元組B是以原矩陣的列為排列順序rowcolvalue121213931-3361443245218611564-7rowcolvalue13-3161521122518319342446-76314稀疏矩陣的轉(zhuǎn)置算法時(shí)間復(fù)雜度:
O(nu*tu)已知矩陣的三元組順序表A,求其轉(zhuǎn)置矩陣的三元組順序表BStatusTransposeSMatrix(TSMatrixA,TSMatrix&B){
//采用三元組表存儲(chǔ)表示,求稀疏矩陣A的轉(zhuǎn)置矩陣B。
B.mu=A.nu;B.nu=A.mu;B.tu=A.tu;
if(B.tu){q=1;//b組,0號(hào)位存其他的信息
for(j=1;j<=A.nu;++j)for(p=1;p<=A.tu;++p)//p是A組的下標(biāo)
if(A.data[p].col==j){
B.data[q].row=A.data[p].col;B.data[q].col=A.data[p].row;B.data[q].value=A.data[p].value;q++;}}returnOK;}//TransposeSMatrix時(shí)間復(fù)雜度:O(nu*tu)十字鏈表當(dāng)矩陣的非零元個(gè)數(shù)和位置在操作(即矩陣運(yùn)算)過(guò)程中變化較大時(shí),就不宜采用順序存儲(chǔ)結(jié)構(gòu)來(lái)表示三元組的線性表。 例如,在作“將矩陣B加到矩陣A上”的操作時(shí),由于非零元的添加或正負(fù)抵消歸零等將會(huì)引起A.data中元素值的變動(dòng)。為此,對(duì)這種類(lèi)型的矩陣,采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)表示三元組的線性表更為恰當(dāng)。每個(gè)非零元可用一個(gè)含五個(gè)域的結(jié)點(diǎn)表示其中row,col和val三個(gè)域分別表示該非零元所在的行、列和非零元的值向右域right用以鏈接同一行中下一個(gè)非零元向下域down用以鏈接同一列中下一個(gè)非零元。rightdownvalcolrow//—
—稀疏矩陣的十字鏈表存儲(chǔ)表示—
—
typedefstructOLNode{ inti,j;
ElemTypee;
structOLNode*right,*down;}OLNode;*OLink;
typedefstruct{
//行和列鏈表頭指針向量,基址由CreateSMatrix分配
OLink*rhead,*chead; intmu,nu,tu;//稀疏矩陣的行數(shù)、列數(shù)和非 零元個(gè)數(shù)
}CrossList;
稀疏矩陣M的十字鏈表311541122213M.cheadM.rhead生成十字鏈表(當(dāng)i值為0時(shí)結(jié)束輸入)兩個(gè)矩陣相加和第二章中討論的兩個(gè)一元多項(xiàng)式相加極為相似。不同的是一元多項(xiàng)式中只有一個(gè)變?cè)?即指數(shù)項(xiàng)),而矩陣中每個(gè)非零元有兩個(gè)變?cè)?行值和列值),每個(gè)結(jié)點(diǎn)既在行表中又在列表中,致使插入
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年高中數(shù)學(xué) 開(kāi)學(xué)第一周 第一章 集合與函數(shù)概念 1.1.1 集合的含義與表示 第一課時(shí) 集合的含義說(shuō)課稿 新人教A版必修1
- 26手術(shù)臺(tái)就是陣地 (說(shuō)課稿)-2024-2025學(xué)年三年級(jí)上冊(cè)語(yǔ)文統(tǒng)編版
- 2025冷庫(kù)銷(xiāo)售合同范本
- 影視企業(yè)簽訂業(yè)績(jī)承諾協(xié)議的財(cái)務(wù)風(fēng)險(xiǎn)控制研究
- Unit 1 Let's be friends!(說(shuō)課稿)-2024-2025學(xué)年外研版(三起)(2024)英語(yǔ)三年級(jí)上冊(cè)
- 農(nóng)村征地合同范本
- 高中語(yǔ)文統(tǒng)編版(部編版)必修 上冊(cè)第一單元3 2 《哦香雪》單篇教學(xué)設(shè)計(jì)
- Unit 4 Space Exploration Listening and Speaking 說(shuō)課稿-2023-2024學(xué)年高中英語(yǔ)人教版(2019)必修第三冊(cè)001
- 丹尼斯合同范本
- 創(chuàng)建合作協(xié)議合同范例
- 北京房地產(chǎn)典當(dāng)合同
- 兒童歌曲彈唱課程標(biāo)準(zhǔn)
- 大學(xué)生心理健康教育全套PPT完整教學(xué)課件
- 安慶匯辰藥業(yè)有限公司高端原料藥、醫(yī)藥中間體建設(shè)項(xiàng)目環(huán)境影響報(bào)告書(shū)
- 檔案工作管理情況自查表
- 初中英語(yǔ)人教版 八年級(jí)上冊(cè) 單詞默寫(xiě)表 漢譯英
- pcs-9611d-x說(shuō)明書(shū)國(guó)內(nèi)中文標(biāo)準(zhǔn)版
- T∕CMATB 9002-2021 兒童肉類(lèi)制品通用要求
- 工序勞務(wù)分包管理課件
- 畢業(yè)論文-基于51單片機(jī)的智能LED照明燈的設(shè)計(jì)
- 酒廠食品召回制度
評(píng)論
0/150
提交評(píng)論