稀疏矩陣和廣義表_第1頁(yè)
稀疏矩陣和廣義表_第2頁(yè)
稀疏矩陣和廣義表_第3頁(yè)
稀疏矩陣和廣義表_第4頁(yè)
稀疏矩陣和廣義表_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第三章稀疏矩陣和廣義表學(xué)習(xí)目標(biāo)掌握稀疏矩陣的定義及三元組表示和存儲(chǔ)結(jié)構(gòu);掌握稀疏矩陣的運(yùn)算方法和時(shí)間復(fù)雜度;掌握廣義表的定義及存儲(chǔ),長(zhǎng)度、深度求解方法和算法。數(shù)據(jù)結(jié)構(gòu)》第三章稀疏矩陣的定義

稀疏矩陣(SparseMatrix):是矩陣的特殊情況,它的非零元素的個(gè)數(shù)遠(yuǎn)遠(yuǎn)小于零元素的個(gè)數(shù)。

3.1稀疏矩陣123456

30050000-200010406000000000-1000如:數(shù)據(jù)結(jié)構(gòu)》第三章稀疏矩陣中非零元素用(行號(hào),列號(hào),元素值)表示,并以行號(hào)為主關(guān)鍵字,列號(hào)為次關(guān)鍵字對(duì)所有三元組進(jìn)行排序。三元組線性表表示

123456

30050000-200010406000000000-1000((1,1,3),(1,4,5),(2,3,-2),(3,1,1),(3,3,4),(3,5,6),(5,3,-1))數(shù)據(jù)結(jié)構(gòu)》第三章稀疏矩陣的壓縮存儲(chǔ)1、三元組線性表順序存儲(chǔ)2、三元組線性表鏈接存儲(chǔ)帶行指針向量的鏈接存儲(chǔ)十字鏈接數(shù)據(jù)結(jié)構(gòu)》第三章三元組順序存儲(chǔ)123456

30050000-200010406000000000-100011314523-2311334356531下標(biāo)rowcolval1234567:.MaxTerms數(shù)據(jù)結(jié)構(gòu)》第三章三元組線性表順序存儲(chǔ)StructTriple{introw,col;ElemTypeval;}StructSMatrix{intm,n,t;Triplesm[MaxTems+1];};數(shù)據(jù)結(jié)構(gòu)》第三章35614553-123-211314523-2311334356531帶行指針向量的鏈接存儲(chǔ)113334311數(shù)據(jù)結(jié)構(gòu)》第三章三元組線性表鏈接存儲(chǔ)(1)帶行指針向量的鏈接存儲(chǔ)StructTripleNode{introw,col;ElemTypeval;TripleNode*next;}StructLMatrix{intm,n,t;TripleNode*vector[MaxRows+1];};數(shù)據(jù)結(jié)構(gòu)》第三章113

145十字鏈接存儲(chǔ)23-253-1356334

311

12345612345數(shù)據(jù)結(jié)構(gòu)》第三章(2)十字鏈接存儲(chǔ)StructCrossNode{introw,col;ElemTypeval;CrossNode*down,*rigth;}StructCLMatrix{intm,n,t;CrossNode*rv[MaxRows+1];CrossNode*cv[MaxColumns+1];};數(shù)據(jù)結(jié)構(gòu)》第三章

稀疏矩陣抽象數(shù)據(jù)類型ADTSparseMatrixis

Data:

稀疏矩陣類型

SMatrix(或CLMatrix)

Operation:voidInitMatrix(SMatrix&M);

SMatrixTranspose(SMatrix&M);SMatrixAdd(SMatrix&M1,SMatrix&M2);SMatrixMultiply(SMatrix&M1,SMatrix&M2);voidInputMatrix(SMatrix&M,intm,intn);voidOutputMatrix(SMatrix&M);endSparseMatrix數(shù)據(jù)結(jié)構(gòu)》第三章稀疏矩陣的運(yùn)算

1.初始化運(yùn)算voidInitMatrix(SMatrix&M){M.m=0;M.n=0;M.t=0;}voidInitMatrix(LMatrix&M){M.m=0;M.n=0;M.t=0;for(inti=1;i<=MaxRows;i++)M.vector[i]=NULL;}voidInitMatrix(CLMatrix&M){M.m=0;M.n=0;M.t=0;for(inti=1;i<=MaxRows;i++)M.rv[i]=NULL;for(inti=1;i<=MaxColumns;i++)M.cv[i]=NULL;}數(shù)據(jù)結(jié)構(gòu)》第三章2、稀疏矩陣的輸入voidInputMatrix(SMatrix&M,intm,intn){M.m=m;M.n=n;introw,col,val;intk=0;cin>>row>>col>>val;While(row!=0){k++;M.sm[k].row=row;M.sm[k].col=col;M.sm[k].val=val;cin>>row>>col>>val;}M.t=k;}數(shù)據(jù)結(jié)構(gòu)》第三章voidInputMatrix(CLMatrix&M,intm,intn);{M.m=m;M.n=n;introw,col,val;intk=0;cin>>row>>col>>val;while(row!=0){k++;CrossNode*cp,*newptr;newptr=newCrossNode;newptr->row=row;newptr->col=col;newptr->val=val;數(shù)據(jù)結(jié)構(gòu)》第三章newptr->right=newptr->down=NULL;cp=M.rv[row];if(cp==NULL)M.rv[row]=newptr;else{while(cp->right!=NULL)cp=cp->right;cp->right=newptr;}cp=M.cv[col];if(cp==NULL)M.cv[col]=newptr;else{while(cp->down!=NULL)cp=cp->down;cp->down=newptr;}cin>>row>>col>>val;}M.t=k;}數(shù)據(jù)結(jié)構(gòu)》第三章3、稀疏矩陣的輸出voidOutputMatrix(SMatrix&M){cout<<“(“;for(inti=1;i<M.t;i++){cout<<“(“<<M.sm[i].row<<“,”;cout<<M.sm[i].col<<“,”;cout<<M.sm[i].val<<“)”<<“,”;}for(M.t!=0){cout<<“(“<<M.sm[M.t].row<<“,”;cout<<M.sm[M.t].col<<“,”;cout<<M.sm[M.t].val<<“)”;}cout<<“)“<<endl;}數(shù)據(jù)結(jié)構(gòu)》第三章4、稀疏矩陣的轉(zhuǎn)置運(yùn)算SMatrixTranspose(SMatrix&M){SMatrixS;InitMatrix(S);intm,n,t;m=M.m;n=M.n;t=M.t;S.m=n;S.n=m;S.t=t;if(t==0)returnS;intk=1;for(intcol=1;col<=n;col++)for(inti=1;i<=t;i++)if(M.sm[i].col==col){S.sm[k].row=col;S.sm[k].col=M.sm[i].row;S.sm[k].val=M.sm[i].val;k++;}returnS;}數(shù)據(jù)結(jié)構(gòu)》第三章5、稀疏矩陣的加法運(yùn)算LMatrixAdd(LMatrix&M1,LMatrix&M2){LMatrixM;InitMatrix(M);if((M1.m!=M2.m)||(M1.n!=M2.n)){cerr<<“twomatrixmeasurenentsaredifferent!”<<endl;exit(1);}M.m=M1.m;M.n=M1.n;if((M1.t==0)&&(M2.t==0))returnM;intk=0;數(shù)據(jù)結(jié)構(gòu)》第三章for(inti=1;i<=M1.m;i++){TripleNode*p1;*p2,*p;p1=M1.vector[i];p2=M2.vector[i];p=M.vector[i];while((p1!=NULL)&&(p2!=NULL)){TripleNode*newptr=newTripleNode;if(p1->col<p2->col){*newptr=*p1;p1=p1->next;}elseif(p1->col>p2->col){*newptr=*p2;p2=p2->next;}數(shù)據(jù)結(jié)構(gòu)》第三章elseif(p1->val+p2->vol==0){p1=p1->next;p2=p2->next;deletenewptr;continue;}else{*newptr=*p1;newptr->val+=p2->vol;p1=p1->next;p2=p2->next;}if(p==NULL)M.vector[i]=newptr;elsep->next=newptr;p=newptr;k++;}數(shù)據(jù)結(jié)構(gòu)》第三章while(p1!=NULL){TripleNode*newptr=newTripleNode;*newptr=*p1;newptr->next=NULL;if(p==NULL)M.vector[i]=newptr;elsep->next=newptr;p=newptr;p1=p1->next;k++;}數(shù)據(jù)結(jié)構(gòu)》第三章while(p2!=NULL){TripleNode*newptr=newTripleNode;*newptr=*p2;newptr->next=NULL;if(p==NULL)M.vector[i]=newptr;elsep->next=newptr;p=newptr;p2=p2->next;k++;}}M.t=k;returnM;}數(shù)據(jù)結(jié)構(gòu)》第三章廣義表的定義

n(0)個(gè)表元素組成的有限序列,記作

LS=(a0,a1,a2,…,an-1)LS是表名,ai是表元素,它可以是表(稱為子表),可以是數(shù)據(jù)元素(稱為原子)。

n為表的長(zhǎng)度。n=0的廣義表為空表。

n>0時(shí),表的第一個(gè)表元素稱為廣義表的表頭(head),除此之外,其它表元素組成的表稱為廣義表的表尾(tail)。

3.2廣義表數(shù)據(jù)結(jié)構(gòu)》第三章A=()B=(6,2)

C=(‘a(chǎn)’,(5,3,‘x’))表的深度:樹(shù)根結(jié)點(diǎn)到每個(gè)樹(shù)枝結(jié)點(diǎn)所經(jīng)過(guò)的結(jié)點(diǎn)個(gè)數(shù)的最大值D=(B,C,A)數(shù)據(jù)結(jié)構(gòu)》第三章廣義表的存儲(chǔ)結(jié)構(gòu)structGLNode{booltag;union{ElemTypedata;GLNode*sublist;};GLNode*next;};數(shù)據(jù)結(jié)構(gòu)》第三章A=()B=(6,2)

C=(‘a(chǎn)’,(5,3,‘x’))A=NULL02B061C0a03050x數(shù)據(jù)結(jié)構(gòu)》第三章A=()B=(6,2)

C=(‘a(chǎn)’,(5,3,‘x’))帶表頭結(jié)點(diǎn)的廣義表存儲(chǔ)結(jié)構(gòu)1AB02061C110a03050x數(shù)據(jù)結(jié)構(gòu)》第三章廣義表的運(yùn)算1、求廣義表長(zhǎng)度intLenth(GLNode*GL){if(GL!=NULL)return1+Lenth(G->next);elsereturn0;}數(shù)據(jù)結(jié)構(gòu)》第三章2、求廣義表深度intDepth(GLNode*GL){intmax=0;while(GL!=NULL){if(GL->tag==true){intdep=Depth(GL->sublist);if

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論