版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)第五章數(shù)組和廣義表第一頁,共四十八頁,編輯于2023年,星期三
第五章
數(shù)組和廣義表
5.1數(shù)組的定義5.2數(shù)組的順序存儲結(jié)構(gòu)5.3矩陣的壓縮存儲5.4廣義表的定義5.5廣義表的存儲結(jié)構(gòu)第二頁,共四十八頁,編輯于2023年,星期三3
前4章介紹的數(shù)據(jù)結(jié)構(gòu)共同特點(diǎn):▲都屬于線性數(shù)據(jù)結(jié)構(gòu);▲每種數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)元素,都作為原子數(shù)據(jù),不再進(jìn)行分解;本章討論的兩種數(shù)據(jù)結(jié)構(gòu):數(shù)組和廣義表,其共同特點(diǎn)是:▲從邏輯結(jié)構(gòu)上看它們,可看成是線性結(jié)構(gòu)的一種擴(kuò)展;▲數(shù)據(jù)元素本身也是一個數(shù)據(jù)結(jié)構(gòu);第五章
數(shù)組和廣義表第三頁,共四十八頁,編輯于2023年,星期三4
一、數(shù)組的定義(1)數(shù)組的抽象數(shù)據(jù)類型定義
ADTArray
{數(shù)據(jù)對象:D={aj1,j2,…,ji,…,jn|ji=0,…,bi-1,i=1,2,…,n(n>0)稱為數(shù)組的維數(shù),bi是數(shù)組第i維的長度,ji是數(shù)組元素的第i維下標(biāo)}
5.1數(shù)組的定義
數(shù)據(jù)關(guān)系:R={R1,R2,…
,Rn}第四頁,共四十八頁,編輯于2023年,星期三5
Ri={<aj1…ji…jn,aj1…ji+1
…jn>|0≤jk≤bk-1,1≤k≤n
且ki,0≤ji≤bi-2,aj1…ji…jn,aj1…ji+1
…jn∈D,
i=2,…
,n}
如二維數(shù)組的定義:數(shù)據(jù)對象:D={aij|0≤i≤b1-1,0≤j≤b2-1}
數(shù)據(jù)關(guān)系:R={ROW,COL}ROW={<ai,j,ai+1,j>|0≤i≤b1-2,0≤j≤b2-1}COL={<ai,j,ai,j+1>|0≤i≤b1-1,0≤j≤b2-2}
第五頁,共四十八頁,編輯于2023年,星期三6
(2)
二維數(shù)組的解釋a00
a01…
a0n-1a10
a11…
a1n-1┋┋┋am-10
am-11
…
am-1n-1
二維數(shù)組中的每個元素都受兩個線性關(guān)系的約束,即行關(guān)系和列關(guān)系,在每個關(guān)系中,每個元素aij都有且僅有一個直接前趨,都有且僅有一個直接后繼。在行關(guān)系中
aij直接前趨是aij-1aij直接后繼是aij+1在列關(guān)系中
aij直接前趨是ai-1jaij直接后繼是ai+1j第六頁,共四十八頁,編輯于2023年,星期三7
A=(0,1,2,3,
4,……,p)
p=m-1或n-1
其中每一個數(shù)據(jù)元素j
是一個列向量的線性表
j=(a0j,
a1j,a2j,
a3j,……
,am-1j)0≤j≤n-1
二維數(shù)組也可看作這樣的線性表:其每一個數(shù)據(jù)元素也是一個線性表。a00
a01…
a0n-1a10
a11…
a1n-1┋┋┋am-10
am-11…
am-1n-1Amn=a00
a10
┋
am-10Amn=第七頁,共四十八頁,編輯于2023年,星期三8或i
是一個行向量的線性表
i=(ai0,ai1,ai2,
ai3,……
,ain-1)0≤i≤m-1Amn=((a00a01…
a0n-1),(a10a11…
a1n-1),(am-10am-11…
am-1n-1))(3)C語言中二維數(shù)組類型的一種定義
typedefelemtypeArray2[m][n];
等價于
typedefelemtypeArray1[n];typedefArray1Array2[m];
同理,可以用n-1維數(shù)組的數(shù)據(jù)類型來定義n維數(shù)組。第八頁,共四十八頁,編輯于2023年,星期三9一、數(shù)組的順序表示和實(shí)現(xiàn)
(1)類型特點(diǎn)
①只有引用型操作,一般不作插入或刪除操作;
②數(shù)組是多維的結(jié)構(gòu),而存儲空間是一個一維的結(jié)構(gòu)。(2)兩個策略----兩種順序映象的方式①以行序?yàn)橹餍?低下標(biāo)優(yōu)先);②以列序?yàn)橹餍?高下標(biāo)優(yōu)先)。5.2數(shù)組的順序存貯結(jié)構(gòu)第九頁,共四十八頁,編輯于2023年,星期三10a00
a01…
a0n-1a10
a11…
a1n-1┋┋┋am-10
am-11…
am-1n-1Amn=以行為主序的方式:a00a01a0n-1
a10a11a1n-1a(m-1)n-1amn-101n-1nn+12n-1mn-1第十頁,共四十八頁,編輯于2023年,星期三1101m-1mm+12m-1nm-1a00a10am-10
a01
a11am-11
a0n-1a1n-1
amn-1以列為主序的方式:第十一頁,共四十八頁,編輯于2023年,星期三1212(4)存儲位置的公式
假設(shè)二維數(shù)組A每個元素占用L個存儲單元,若以行序?yàn)橹餍虻姆绞酱鎯ΧS數(shù)組,二維數(shù)組A中任一元素ai,j的存儲位置為:
LOC(i,j)=LOC(0,0)+(b2×i+j)×
L
三維數(shù)組A中任一元素ai,j,k的存儲位置為:
LOC(i,j,k)=LOC(0,0,0)+(b2×b3×i+b3×j+k)×L若以列序?yàn)橹餍虻姆绞酱鎯ΧS數(shù)組,則元素aij
的存儲位置可由下式確定:Loc(aij)=Loc(a00)+(b1
j+i)L第十二頁,共四十八頁,編輯于2023年,星期三1313三維二維一維123123412a111a121a131a141a211a231a241a221a331a341a321a311a142a132a122a112a242a342第十三頁,共四十八頁,編輯于2023年,星期三141414推廣到一般情況,可得到n維數(shù)組數(shù)據(jù)元素存儲位置的映象關(guān)系:P93稱為n維數(shù)組的映象函數(shù)。數(shù)組元素的存儲位置是其下標(biāo)的線性函數(shù)。
▲
是隨機(jī)存儲結(jié)構(gòu)。三維二維一維123123412a111a121a131a141a211a231a241a221a331a341a321a311a142a132a122a112a242a342其中cn=L,ci-1=bi*ci,1<i<=n第十四頁,共四十八頁,編輯于2023年,星期三151515(5)結(jié)構(gòu)定義
#definemaxarraydim8typedefstruct{elemtype*base;//數(shù)組元素基址
intdim;//數(shù)組維數(shù)
int*bounds;//數(shù)組維界基址(各維容量)
int*constants;//數(shù)組映象函數(shù)常量基址}array;第十五頁,共四十八頁,編輯于2023年,星期三5.3矩陣的壓縮存儲
一特殊矩陣的壓縮存儲二稀疏矩陣的壓縮存儲
1三元組表的存儲結(jié)構(gòu)2十字鏈表的存儲結(jié)構(gòu)第十六頁,共四十八頁,編輯于2023年,星期三(1)矩陣壓縮存儲的必要性矩陣是許多科學(xué)與工程計算問題中常常涉及到的一種運(yùn)算對象。通常程序員是用二維數(shù)組存儲矩陣。由于這種存儲方法可以隨機(jī)地訪問矩陣的每個元素,因而能較為容易地實(shí)現(xiàn)矩陣的各種運(yùn)算。應(yīng)用中常遇到一些階數(shù)很高的矩陣,矩陣中有許多值相同的元素或零元素。二維數(shù)組存儲矩陣會浪費(fèi)很多的存儲單元。例如,設(shè)一個10001000的矩陣中有800個非零元素,若用二維數(shù)組存儲需要106個存儲單元。因此,需要使用高效的存儲方法,減少數(shù)據(jù)的存儲量,即對原矩陣,根據(jù)數(shù)據(jù)分布特征進(jìn)行壓縮存儲。1、矩陣的壓縮存儲5.3矩陣的壓縮存儲第十七頁,共四十八頁,編輯于2023年,星期三(2)壓縮存儲的有關(guān)概念①
壓縮存儲:為多個值相同的元素分配一個存儲空間,對零元不分配空間。②
特殊矩陣:值相同的元素或零元素在矩陣中的分布有一定規(guī)律。③稀疏矩陣:值相同的元素或者零元素在矩陣中的分布無規(guī)律。第十八頁,共四十八頁,編輯于2023年,星期三a11a11a1na21a22a2nan1an2anna11a21a22a31a32a33
an1an2an3ann②壓縮存儲方法為每一對對稱元分配一個存儲空間,則可將n2個元壓縮存儲到n(n+1)/2個元的空間中。(3)特殊矩陣①概念:若n階矩陣A中的元滿足:aij=aji1≤i,j≤n,則稱為n階對稱矩陣。a11a21
a22
a31
a32
a33
an1
an2
annk=012345n(n+1)/2-1第十九頁,共四十八頁,編輯于2023年,星期三③下標(biāo)對應(yīng)關(guān)系k=當(dāng)i≥j當(dāng)ij矩陣的上(下)三角(不含對角線)中的元均為常數(shù)C或0的n階矩陣(三角矩陣),其存儲方法相同。例如,
a32在sa[]中的存儲位置是:k=3*(3-1)/2+2-1=4sa[4]=a32(4)對角矩陣①概念:非零元都集中在以主對角線為中心的帶狀區(qū)域中。②存儲:這種矩陣可以某個原則(以行為主,或以對角線的順序)將其壓縮存儲到一維數(shù)組上。第二十頁,共四十八頁,編輯于2023年,星期三
壓縮存儲的對稱矩陣的取值算法intget_M(inti,intj){if(i>=j)return(sa[i*(i+1)/2+j])elsereturn(sa[j*(j+1)/2+i]);}壓縮存儲的對稱矩陣的賦值算法voidassign_M(inti,intj,intvalue){if(i>=j)sa[i*(i+1)/2+j]=value;elsesa[j*(j+1)/2+i]=value;}第二十一頁,共四十八頁,編輯于2023年,星期三
帶狀矩陣
所有非0元素都集中在以主對角線為中心的帶狀區(qū)域,半帶寬為d時,非0元素有(2d+1)*n-(1+d)*d個a00a01a020
0
0
0
0
0
0
0
0
a10a11a12a130
0
00
0
0
0
0a20a21a22a23a24000
0
0
0
00
a31a32a33a34a3500
0
0
0
00
0
a42a43a44a45a460
0
0
0
00
0
0a53a54a55a56a5700
0
0
0
0
00
a64a65a66a67a680
0
00
00
0
0
a75a76a77a78a790
0
00
0
0
0
0a86a87a88a89a810
0
00
0
0
0
0
0
a97
a98a99a910a91100
0
0
0
0
0
0
a108a109a1010a101100
0
0
0
0
0
0
0
a119a1110a1111d第二十二頁,共四十八頁,編輯于2023年,星期三a00a010
0
0
a10a11a1200
0
a21a22a2300
0
a32a33a340
0
0a43a44為計算方便,認(rèn)為每一行都有2d+1個非0元素,若少則用0補(bǔ)足,所以,存放矩陣的數(shù)組sa[]有n(2d+1)個元素數(shù)組元素sa[k]與矩陣元素aij
之間有關(guān)系:
k=i*(2d+1)+d+(j-i)0
a00
a01
a10
a11a12a21a22a23a32a33a34a43a440K=01234567891011121314第二十三頁,共四十八頁,編輯于2023年,星期三
壓縮存儲的帶狀矩陣的取值算法intget_Md(inti,intj){if(abs(i-j)<=d)return(sa[i*(2*d+1)+d+(j-i)]);elsereturn(0);}壓縮存儲的帶狀矩陣的賦值算法voidassign_Md(inti,intj,intvalue){if(abs(i-j)<=d)sa[i*(i+1)/2+j]=value;}第二十四頁,共四十八頁,編輯于2023年,星期三(5)稀疏矩陣①含義:在m×n的矩陣中,有t個元素不為零,令:稱δ為矩陣的稀疏因子,通常認(rèn)為δ≤0.05時稱稀疏矩陣②抽象數(shù)據(jù)類型稀疏矩陣的定義③分析按常規(guī)方法,即以二維數(shù)組表示高階的稀疏矩陣時產(chǎn)生的問題:
I零值元素占了很大空間;
II計算中進(jìn)行了很多和零值的運(yùn)算,遇除法,還需判別除數(shù)是否為零。
第二十五頁,共四十八頁,編輯于2023年,星期三解決問題的原則:
I盡可能少存或不存零值元素;
II
盡可能減少沒有實(shí)際意義的運(yùn)算;
III
操作方便。即:能盡可能快地找到與下標(biāo)值(i,j)對應(yīng)的元素,能盡可能快地找到同一行或同一列的非零值元。
為此提出一種存儲方法:為了能找到相應(yīng)的元素,僅存儲非零元素的值是不夠的,還要記下它所在的行和列。于是采取將非零元素所在的行、列以及它的值構(gòu)成一個三元組(i,j,v),然后再按某種規(guī)律存儲這些三元組,這種方法可以節(jié)約存儲空間。第二十六頁,共四十八頁,編輯于2023年,星期三例如:稀疏矩陣:
A
=012900000000000-3000014000240000018000001500-7000可用三元組表(i,j,aij)A=((0,1,12),(0,2,9),(2,0,-3),(2,5,14),(3,2,24),(4,1,18),(5,0,15),(5,3,-7))加上行、列數(shù)、非零元個數(shù)6,7,8表示。
▲用三元組表存儲稀疏矩陣有三種方法:
I三元組順序表
II行邏輯鏈接的順序表
III十字鏈表第二十七頁,共四十八頁,編輯于2023年,星期三④三元組順序表
I概念:以順序存儲結(jié)構(gòu)來表示三元組表,得稀疏矩陣的一種壓縮存儲方式——稱之為三元組順序表。如:
A
=
012900000000000-3000014000240000018000001500-7000
i
jV01234567831-3611512125218139432464-73614678第二十八頁,共四十八頁,編輯于2023年,星期三如:ma[1].row=1,ma[1].col=1,ma[1].value=12
II結(jié)構(gòu)定義#definemaxsize1024typedefstruct{inti,j;elemtypev;}triple;typedefstruct{tripledata[maxsize+1];intmu,nu,tu;}tsmatrix;
III轉(zhuǎn)置運(yùn)算算法
轉(zhuǎn)置運(yùn)算是一種最常用的矩陣運(yùn)算。對于一個m
行n列的矩陣A,它的轉(zhuǎn)置矩陣B是一個n行m
列的矩陣。如,下圖中的矩陣A
和B
互為轉(zhuǎn)置矩陣。第二十九頁,共四十八頁,編輯于2023年,星期三
A第0列第一列第二列第三列第四列第五列第六列
….
B第0行第一行第二行第三行第四行第五行第六行
….轉(zhuǎn)置運(yùn)算算法第三十頁,共四十八頁,編輯于2023年,星期三B
=00-3001512000180
900240000000-70000000014000000000
分析:
◆
將矩陣的行列數(shù)的值交換
◆將每一個三元組的i和j相互調(diào)換
◆重排三元組之間的次序
A
=
012900000000000-3000014000240000018000001500-7000第三十一頁,共四十八頁,編輯于2023年,星期三
算法一
i
j
v01234567831-3611512125218139432464-73614678
i
j
v012345678211246-713-33424161531963142518768第三十二頁,共四十八頁,編輯于2023年,星期三按照A的列序來進(jìn)行轉(zhuǎn)換的基本思想
對ma[]從頭至尾掃描:第一次掃描時,將ma[]中列號為0的所有元組交換行列值后,依次賦值到mb[]中;第二次掃描時,將ma[]中列號為1的所有元組交換行列值后,依次賦值到mb[]中;依此類推,直至將ma[]的所有三元組賦值到mb[]中。第三十三頁,共四十八頁,編輯于2023年,星期三
ijv121213931-3361443245218611564-7ijv31-3251813-3611516151212211252181393194324342464-746-736146314A矩陣B矩陣對A六次掃描完成轉(zhuǎn)置運(yùn)算第一次掃描查找第1列元素第一次掃描結(jié)束第二次掃描結(jié)束第二次掃描查找第2列元素第三次掃描查找第3列元素第四次掃描查找第4列元素第五次掃描查找第5列元素第六次掃描查找第6列元素轉(zhuǎn)置運(yùn)算算法圖示012345678678768第三十四頁,共四十八頁,編輯于2023年,星期三
算法一描述(保持以行序?yàn)橹餍虼鎯?inttpm(tsmatrixm,tsmatrix*t){t->mu=m.nu;t->nu=m.mu;t->tu=m.tu;if(t->tu){q=1;for(col=1;col<=m.nu;col++)for(p=1;p<=m.tu;p++)if(m.data[p].j==col){t->data[q].i=m.data[p].j;t->data[q].j=m.data[p].i;t->data[q].v=m.data[p].v;q++;}}returnok;}▲
時間復(fù)雜度為〇(nu×tu)第三十五頁,共四十八頁,編輯于2023年,星期三ijv012345678768
mb[]
算法二——快速轉(zhuǎn)置算法
方法:以A矩陣的三元組為中心,依次取出ma[]中的每一個三元組,交換行列后,直接將其寫入mb[]合適的位置中。
342416153196314251813-3i
jvma[]01234567831-361156785218139432464-736141212211246-7第三十六頁,共四十八頁,編輯于2023年,星期三⑤十字鏈表
I概念:以三元組表示的稀疏矩陣,在運(yùn)算中,若非0元素的位置發(fā)生變化,會引起數(shù)組元素的頻繁移動。為解決這個問題,采用十字鏈表的存儲結(jié)構(gòu)在十字鏈表中,表示非0元素結(jié)點(diǎn)除了三元組,還有兩個指針域:
向下域(down)
鏈接同一列下一個非0元素
向右域(right)
鏈接同一行下一個非0元素稀疏矩陣中同一行的非0元素結(jié)點(diǎn)通過向右域,鏈接成一個帶頭結(jié)點(diǎn)的行循環(huán)鏈表。同一列的非0元素結(jié)點(diǎn)通過向下域,鏈接成一個帶頭結(jié)點(diǎn)的列循環(huán)鏈表。
第三十七頁,共四十八頁,編輯于2023年,星期三
rowcolvaldownrightII
十字鏈表的存儲結(jié)構(gòu)(結(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu))如下:
structnode{introw,col,val;structnode*down,*right;}第三十八頁,共四十八頁,編輯于2023年,星期三例如矩陣A
=
32050-1002000000044500000000000003501200300000000000020211-1head1022221022十字鏈表圖示第三十九頁,共四十八頁,編輯于2023年,星期三
小結(jié)
1矩陣壓縮存儲是指為多個值相同的元素分配一個存儲空間,對零元素不分配存儲空間;2特殊矩陣的壓縮存儲是根據(jù)元素的分布規(guī)律,確定元素的存儲位置與元素在矩陣中的位置的對應(yīng)關(guān)系;3稀疏矩陣的壓縮存儲除了要保存非零元素的值外,還要保存非零元素在矩陣中的位置;第四十頁,共四十八頁,編輯于2023年,星期三1、廣義表的定義(1)廣義表的引入線性表是由n個數(shù)據(jù)元素組成的有限序列。其中每個組成元素被限定為單元素,有時這種限制需要拓寬。例如,中國舉辦的某體育項(xiàng)目國際邀請賽,參賽隊清單可采用如下的表示形式:(俄羅斯,巴西,(國家,河北,四川),古巴,美國,(),日本)在這個拓寬了的線性表中,韓國隊?wèi)?yīng)排在美國隊的后面,但由于某種原因未參加,成為空表。國家隊、河北隊、四川隊均作為東道主的參賽隊參加,構(gòu)成一個小的線性表,成為原線性表的一個數(shù)據(jù)項(xiàng)。這種拓寬了的線性表就是廣義表。5.4廣義表第四十一頁,共四十八頁,編輯于2023年,星期三(2)廣義表的定義廣義表(GeneralizedLists)是n(n≥0)個數(shù)據(jù)元素
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 代辦報價合同范例
- 單價合同綜合單價合同范例
- 公司借款法人合同范例
- 家具工廠購銷合同范例
- 合伙開鞋廠合同范例
- 合資綠茶公司合同范例
- 奔馳買車定金合同模板
- 外拓合同模板
- 奶茶企業(yè)加盟合同范例
- 寄賣正規(guī)合同模板
- 外研版小學(xué)英語(三起點(diǎn))六年級上冊期末測試題及答案(共3套)
- 北師大版(2024新版)七年級上冊生物期中學(xué)情調(diào)研測試卷(含答案)
- 產(chǎn)品包裝規(guī)范管理制度
- 2024年海南省中考物理試題卷(含答案)
- 2024統(tǒng)編新版小學(xué)三年級語文上冊第八單元:大單元整體教學(xué)設(shè)計
- 第07講 物態(tài)變化(原卷版)-2024全國初中物理競賽試題編選
- 高危兒規(guī)范化健康管理專家共識解讀
- DB61T1521.5-2021奶山羊養(yǎng)殖技術(shù)規(guī)范 第5部分:后備羊培育
- 中國心力衰竭基層診療與管理指南(2024年版)
- 2024-2030年中國番茄粉行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 2024至2030年中國連續(xù)熱鍍鋁硅合金鋼板行業(yè)市場深度分析及發(fā)展趨勢預(yù)測報告
評論
0/150
提交評論