![數(shù)據(jù)結(jié)構(gòu)第5章數(shù)組和廣義表課件_第1頁](http://file4.renrendoc.com/view/75bf9c59c0d9aac9e8bc7e816386e84c/75bf9c59c0d9aac9e8bc7e816386e84c1.gif)
![數(shù)據(jù)結(jié)構(gòu)第5章數(shù)組和廣義表課件_第2頁](http://file4.renrendoc.com/view/75bf9c59c0d9aac9e8bc7e816386e84c/75bf9c59c0d9aac9e8bc7e816386e84c2.gif)
![數(shù)據(jù)結(jié)構(gòu)第5章數(shù)組和廣義表課件_第3頁](http://file4.renrendoc.com/view/75bf9c59c0d9aac9e8bc7e816386e84c/75bf9c59c0d9aac9e8bc7e816386e84c3.gif)
![數(shù)據(jù)結(jié)構(gòu)第5章數(shù)組和廣義表課件_第4頁](http://file4.renrendoc.com/view/75bf9c59c0d9aac9e8bc7e816386e84c/75bf9c59c0d9aac9e8bc7e816386e84c4.gif)
![數(shù)據(jù)結(jié)構(gòu)第5章數(shù)組和廣義表課件_第5頁](http://file4.renrendoc.com/view/75bf9c59c0d9aac9e8bc7e816386e84c/75bf9c59c0d9aac9e8bc7e816386e84c5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1第5章數(shù)組和廣義表5.1數(shù)組的邏輯結(jié)構(gòu)5.2數(shù)組的順序存儲結(jié)構(gòu)5.3矩陣的壓縮存儲5.4廣義表5.1數(shù)組的邏輯結(jié)構(gòu)5.2數(shù)組的順序存儲結(jié)構(gòu)5.3矩陣的壓縮存儲5.4數(shù)組(array)是最常用的數(shù)據(jù)結(jié)構(gòu)之一。幾乎所有的程序設(shè)計語言都把數(shù)組類型設(shè)定為固有類型。數(shù)組的定義線性結(jié)構(gòu)中的數(shù)據(jù)都是非結(jié)構(gòu)的原子類型,元素的值是不再分解的。而數(shù)組可以看成是線性表在下述含義上的擴(kuò)展:5.1數(shù)組的邏輯結(jié)構(gòu)2數(shù)組的基本操作表中的數(shù)據(jù)元素本身也是一種數(shù)據(jù)結(jié)構(gòu)。數(shù)組是由下標(biāo)和值組成的序?qū)?。在?shù)組中,一旦給定下標(biāo),都存在一個與其相對應(yīng)的值,這個值就稱為數(shù)組元素。也可以說,數(shù)組中的每個數(shù)據(jù)元素都對應(yīng)于一組下標(biāo)(j1
,j2
,…,jn),每個下標(biāo)取值范圍是1≤ji≤bi,bi稱為第i
維的長度(i=1,2,…,n)。顯然,當(dāng)n=1時,n維數(shù)組就退化為定長的線性表。反之,n
維數(shù)組也可以看成是線性表的推廣。3 5.1.1數(shù)組的定義 每個數(shù)據(jù)元素α
j是一個列向量形式的線性表Am×n=…a1,na2,n…am,na13a23…am,3a12a22…am,2a11a21…am,1
二維數(shù)組A
還可以看成是一個線性表:A=(α1,α
2,…,α
n)
α
j=(a1j
,a2j
,…,am,j) 1≤j≤n 每個數(shù)據(jù)元素是一個行向量形式的線性表
B=(β1β2β3…,
βm)Am×n=((a11
a12
…a1,n
),…,(am,1am,2…am,n
))(a21
a22
…a2,n
),…,βi=(ai1,ai2,…,ai,n) 1≤i≤m5數(shù)組一旦被定義,它的維數(shù)和維界就不再改變。因此,除了結(jié)構(gòu)的初始化和銷毀之外,數(shù)組只有存取數(shù)據(jù)元素和修改數(shù)據(jù)元素值的操作。6 5.1.2數(shù)組的抽象類型定義ADTArray{
D={aj1j2j3…..jn|n>0,稱為數(shù)組的維數(shù),ji是數(shù)組的第i維下標(biāo),1≤ji
≤bi,
bi為數(shù)組第i維的長度,aj1j2j3…..jn∈ElementSet}數(shù)據(jù)關(guān)系:R
={R1,R2,…….Rn}Ri=<aj1…ji….jn,aj1…ji+1…jn>|1≤jk≤bk,1≤k≤n且k≠i,1≤ji
≤bi-1,aj1…j2….jn,aj1…ji+1…jn∈D,i=1,…n}基本操作:InitArray(A,n,bound1,…,boundn); 操作結(jié)果:如果維數(shù)n
和各維長度合法,則構(gòu)造 相應(yīng)的數(shù)組A,并且返回TRUE。由于內(nèi)存儲器的結(jié)構(gòu)是一維的。一維數(shù)組可直接采用順序存儲。用一維的內(nèi)存存儲表示多維數(shù)組時,需按某種次序?qū)?shù)組中元素排成一線性序列,再將這個線性序列存放在一維的內(nèi)存中,即數(shù)組的順序存儲結(jié)構(gòu)表示。順序存儲的定位公式5.2數(shù)組的順序存儲結(jié)構(gòu)9數(shù)組的順序存儲表示基本操作的算法描述
用順序存儲結(jié)構(gòu)來存儲數(shù)組中的元素,一定要按照某種次序?qū)⒃嘏懦梢粋€線性序列。有兩種存儲方式:(1)以列為主序(columnmajororder)的存儲方式,即按列優(yōu)先,逐列順序存儲。(2)以行為主序(rowmajororder)的存儲方式,即按行優(yōu)先,逐行順序存儲。10 5.2.1順序存儲的定位公式a21a11…am,1a22a12…am,2a1,n…a2,n…am,na21a11…am,1a21a11…Am,1a21a11…am,1a22a12…am,2a22a12…am,2a22a12…am,2………a1,na2,n…am,na1,na2,n…am,na1,na2,n…am
n11列主次序存放對于數(shù)組,一旦規(guī)定了它的維數(shù)和各維的長度,便可以為它分配存儲空間。反之,只要給出一組下標(biāo),便可以求得相應(yīng)數(shù)組的存儲位置。13(1)一維數(shù)組的地址計算:設(shè)一維數(shù)組為:A=(a1,a2,…,ai,…,an),數(shù)組中每個元素占size個存儲單元,則元素ai的存儲地址為:Loc(A[i])=Loc(A[1])+(i-1)*size。
數(shù)組的地址計算14
⑵二維數(shù)組的地址計算
假設(shè)每個數(shù)據(jù)元素占1
個存儲單元,且以行序為主序的進(jìn)行存儲,則二維數(shù)組A
中任一元素aij
的存儲位置可以由下面定位公式確定LOC(A[i],[j])=LOC(A[1],[1])+n*(i-1)+(j-1)其中:
LOC(A[i[,[j]) 是aij
的存儲位置;
LOC(A[1],[1]) 是a11
的存儲位置,即二維數(shù)組A
的起始存儲位置,也稱為基地址或基址;n 是數(shù)組第二維的長度。15
假設(shè)每個數(shù)據(jù)元素占size個存儲單元,則二維數(shù)組A
中任一元素aij
的存儲位置可以由下面定位公式確定LOC(A[i],[j])=LOC(A[1],[1])+(n*(i-1)+(j-1))*size矩陣(matrix)是很多科學(xué)與工程計算問題中研究的數(shù)學(xué)對象。在數(shù)據(jù)結(jié)構(gòu)中,我們感興趣的不是矩陣本身,而是如何存儲矩陣的元素而使矩陣的各種運(yùn)算能夠有效地進(jìn)行。
特殊矩陣包括兩個部份:①元素分布有特殊規(guī)律的矩陣,找到規(guī)律對應(yīng)的公式,實現(xiàn)壓縮存儲。②非零元素很少的稀疏矩陣,可采用只存非零元素的方法實現(xiàn)壓縮存儲。5.3矩陣的壓縮存儲17特殊矩陣的壓縮存儲所謂壓縮存儲是指:為多個值相同的元素只分配一個存儲空間;對零元不分配空間。18稀疏矩陣的邏輯結(jié)構(gòu)稀疏矩陣的存儲結(jié)構(gòu)
假若相同的元素或者零元素在矩陣中的分布有一定規(guī)律,則稱特殊矩陣。特殊矩陣主要有3種:對稱矩陣、三角矩陣、帶狀矩陣。
在所有這些統(tǒng)稱為“特殊矩陣”的矩陣中,非零元的分布都有一個明顯的規(guī)律,從而都可以將其壓縮存儲到一維數(shù)組中,并且找到每個非零元在一維數(shù)組中的對應(yīng)關(guān)系。19 5.3.1特殊矩陣的壓縮存儲
對于對稱矩陣,可以為每一對對稱元只分配一個存儲空間,這樣就可以將n2
個元壓縮存儲到n(n+1)/2個元的空間中。假設(shè)以行序為主序存儲對稱矩陣的下三角(包括對角線)中的元。以一維數(shù)組B[n(n+1)/2]作為n
階對稱矩陣M
的存儲結(jié)構(gòu),21a31a22a21a11an,n…an,1…BLoc(A[i][j]=1234……
Loc(A[i][j])=Loc(A[1][1])+i*(i-1)/2+j-1(i>j)
三角矩陣分為下三角矩陣和上三角矩陣。所謂下(上)三角矩陣是指矩陣的上(下)三角(不包括對角線)中的元均為常數(shù)c
或為零的n
階矩陣。2.三角矩陣22下三角矩陣
三角矩陣除了和對稱矩陣一樣,只存儲矩陣的下(上)三角中的元之外,再加上一個存儲常數(shù)c
的存儲空間即可。上三角矩陣一個n
階方陣,若它的全部非零元素落在一個以對角線為中心的帶狀區(qū)域中,則稱該矩陣為帶狀矩陣,或?qū)蔷仃?。這個帶狀區(qū)域若包含主對角線上下各b
條對角線道上元素,那么,b
稱為該帶狀矩陣的半帶寬,或稱該帶狀矩陣的帶寬為(2b+1)。3.帶狀矩陣00b
條b
條23帶狀矩陣中最常見的是三對角帶狀矩陣。25特點:當(dāng)i=1j=1,21<i<n,j=i-1,i,i+1
i=n,j=n-1,n
aij非零,其它元素均為零
a11Ann=a12000a21a22a23000a32a33a34000a43a44a4500………
1.確定存儲該矩陣所需的一維向量空間的大小除第一行和最后一行只有兩個元素外,其余各行均有3個非零元素,由此得到一維向量所需的空間大小為:3n-2
2.確定非零元素在一維數(shù)組空間中的位置Loc(a[i][j])=Loc(a[1][1])+2(i-1)+j-126
三對角帶狀矩陣的壓縮存儲,以行序為主序進(jìn)行存儲,且只存儲非零元素。其方法為012900000000000-3000014000240000018000001500-7000M=矩陣M
可以由三元組表(1,3,-3),(1,6,15),(2,1,12),(2,5,18),(3,1,9),(3,4,24),(4,6,-7),(6,3,14)再加上(7,6)這一對總的行列值來描述。29#defineMAXSIZE 1000//假設(shè)非零元個數(shù)的最大值為1000typedefstruct{ //三元組順序表的元素結(jié)構(gòu)定義int row,;col //該非零元的行下標(biāo)和列下標(biāo)
ElementTypee; //該非零元的值}Triple;typedefstruct{ //三元組順序表存儲結(jié)構(gòu)定義Tripledata[MAXSIZE+1];//非零元三元組表,data[0]未用
int m,n,len; //矩陣的行數(shù)、列數(shù)和非零個數(shù)}TSMatrix; //三元組順序表的類型名30(1)三元組順序存儲表示
在這里,data域中表示非零元的三元組是以行序為主序順序排列的。012900000000000-3000014000240000018000001500-7000M=13-3161521122518319342446-76314rowcoleA.data[1]A.data[2]A.data[3]A.data[4]A.data[5]A.data[6]A.data[7]A.data[8](a)稀疏矩陣(b)三元組順序表31(2)利用三元組順序表實現(xiàn)矩陣的轉(zhuǎn)置運(yùn)算 將矩陣的行列值相互交互;在這3點中,最關(guān)鍵的是第3條,即如何使B.data中的三元組以T的行(M的列)為主序依次排列。32顯然,一個稀疏矩陣的轉(zhuǎn)置矩陣仍是稀疏矩陣。假設(shè)A
和B
是TSMatrix(三元組順序表)類型變量,分別表示矩陣M和其轉(zhuǎn)置矩陣T。那么,只要做到下面3點就可以由A
得到B,實現(xiàn)矩陣的轉(zhuǎn)置。 將每三元組中的row
和col
相互調(diào)換; 重排三元組之間的次序。33原始的三元組表原矩陣012900000000000-3000014000240000018000001500-7000M=A.data[1]A.data[2]A.data[3]A.data[4]A.data[5]A.data[6]A.data[7]A.data[8]A.data13-3161521122518319342446-76314rowcole轉(zhuǎn)置矩陣00-3001512000180900240000000-70000000014000000000T=轉(zhuǎn)置的三元組表B.data[1]B.data[2]B.data[3]B.data[4]B.data[5]B.data[6]B.data[7]B.data[8]B.data121213931-3361443245218611564-7rowcole使b.data中的三元組以T
的行(M
的列)為主序依次排列的方法有如下兩種:34方法一:按照B.data中三元組的次序,依次在a.data中找到相應(yīng)的三元組進(jìn)行轉(zhuǎn)置。方法二:按照A.data中三元組的次序進(jìn)行轉(zhuǎn)置,并將轉(zhuǎn)置后的三元組置入B.data中恰當(dāng)?shù)奈恢谩2捎梅椒ㄒ虎偎惴ㄋ枷朐贏中按三元組的列域值(col)開始掃描,依序?qū)⑷MA.data的列域值(col
)與行域值(row
)進(jìn)行對換,并且存入B中。由于A是以M的行序為主序來存放每個非零元的,由此得到轉(zhuǎn)置后矩陣的三元組表B恰是以“行序為主序”。35
按照方法一,即按照“被轉(zhuǎn)置矩陣”M的三元組表A
的“列序”遞增順序進(jìn)行轉(zhuǎn)置。為了找到矩陣M
的每一列中所有的非零元素,需要對其三元組A.data從第一行起進(jìn)行掃描,方法如下:
轉(zhuǎn)置的三元組表B->data原始的三元組表A.datar
c
v
1
2
12
1
3
9
3
1
-3
3
6
14
4
3
24
5
2
18
6
1
15
6
4
-736利用三元組順序表存儲實現(xiàn)矩陣的轉(zhuǎn)置c
36151463r
11223346v
-3151218924-714
voidTransposeTSMatrix(TSMatrixA,TSMatrix*B){//采用三元組表結(jié)構(gòu),求稀疏矩陣A
的轉(zhuǎn)置矩陣B。在程序中,inti,j,k;//j
指示B->data中三元組的序號,//i
指示A.data中三元組的序號,//k指示A的列號(即B的行號)
B->m=A.n; //將稀疏矩陣A
的列數(shù)值作為其轉(zhuǎn)置矩陣B
的行數(shù)值B->n=A.m; //將稀疏矩陣A
的行數(shù)值作為其轉(zhuǎn)置矩陣B
的列數(shù)值B->len=A.len; //轉(zhuǎn)置矩陣B與稀疏矩陣A的非零元個數(shù)相等②算法編(稀疏矩陣“列序”遞增轉(zhuǎn)置算法)
if(B->len>0){
j=1;37for(k=1;k<=A.n;k++) for(i=1;i<=A.len;i++) if(A.data[i].col==k){ //進(jìn)行轉(zhuǎn)置
returnOK;}//TransposeSMatrix B->data[j].row=A.data[i].col; //稀疏矩陣A的列域值成為其轉(zhuǎn)置矩陣B
的行域值 B->data[j].col=A.data[i].row; //稀疏矩陣A
的行域值成為其轉(zhuǎn)置矩陣M
的列域值 B->data[j].e=A.data[i].e; //將稀疏矩陣M
的非零元值賦給其轉(zhuǎn)置矩陣T
j++; //B->data中三元組的序號加1 }//if(A.data)結(jié)束}//if(B->len>0)結(jié)束38③算法分析一般矩陣的轉(zhuǎn)置算法(經(jīng)典算法)為:39for(col=0;col<n;++col) for(row=0;row<m;++row)
dest[col][row]=source[row][col];時間復(fù)雜度為O(m×n)。
前面給出的求轉(zhuǎn)置矩陣算法的主要工作是在i
和k的兩重循環(huán)中完成的,所以此算法的時間復(fù)雜度為O(A.n×A.len)即和矩陣A
的列數(shù)和非零元的個數(shù)的乘積成正比。40當(dāng)矩陣M
中非零元個數(shù)幾乎和矩陣元素個數(shù)相等時,即len
和m×n等數(shù)量級時,算法時間復(fù)雜度就為O(m×n2),雖然節(jié)省了存儲空間,但時間復(fù)雜度提高了。由此可見,上述求轉(zhuǎn)置矩陣算法只適合于len<<m×n
的情況。當(dāng)矩陣非零元素的位置或個數(shù)經(jīng)常變動時,就不易采用順序存儲結(jié)構(gòu)表示三元組的線性表。例如,在進(jìn)行“將矩陣
B
加到矩陣A
上”的操作時,由于非零元素的插入或刪除將會引起A.data中元素的大量移動。為此,對這種類型的矩陣,采用鏈?zhǔn)酱鎯Y(jié)構(gòu)表示三元組的線性表更為恰當(dāng)。412.十字鏈表(1)稀疏矩陣的十字鏈表存儲表示
矩陣中非零元的行號row;
矩陣中非零元的列號col;
矩陣中非零元的值e;
向右域right,用以鏈接同一行中下一個非零元;
向下域down,用以鏈接同一列中下一個非零元。42rowdowncolvalueright非零元行號非零元列號非零元的值向下域向右域在鏈表中,矩陣的非零元素可用如下結(jié)點表示:同一行的非零元通過right域鏈接成一個線性鏈表,同一列的非零元通過down域鏈接成一個線性鏈表,每個非零元Mij既是第i個行鏈表中的一個結(jié)點,又是第j個列鏈表中的一個結(jié)點,整個矩陣構(gòu)成了一個十字交叉的鏈表,故稱這樣的存儲結(jié)構(gòu)為十字鏈表。typedefstructOLNode{ //結(jié)點定義int row,col; //該非零元的行和列下標(biāo)ElementTypevalue; //該非零元的值
structOLNode *right,*down;//該非零元所在的行表和列表的后繼鏈域}OLNode;*Olink;typedefstruct{ //十字鏈表定義int m,n,len; //稀疏矩陣行數(shù)、列數(shù)和非零元個數(shù)Olink *row_head,*col_head;//行和列鏈表頭指針向量,由CreateSMatrix分配}CrossList; //十字鏈表存儲結(jié)構(gòu)的類型名43將行鏈表的頭指針存儲在一維數(shù)組M.row_head中將列鏈表的頭指針存儲在一維數(shù)組M.col_head中3020-10500000113145∧22-1∧312∧M.col_headM.row_head∧∧∧∧44CreateSMatrix_OL(CrossList*M){//創(chuàng)建稀疏矩陣M。采用十字鏈表存儲表示。(2)利用十字鏈表實現(xiàn)創(chuàng)建稀疏矩陣的運(yùn)算if(!(M->row_head=(Olink*)malloc((m+1)*sizeof(Olink))))exit(OVERFLOW);if(!(M->col_head=(Olink*)malloc((n+1)*sizeof(Olink))))exit(OVERFLOW);if(M)free(M);scanf(&m,&n,&t); //輸入M
的行數(shù)、列數(shù)和非零元個數(shù)
M->m=m;M->n=n;M->len=t;45①算法編寫for(scanf(&i,&j,&e);i!=0;scanf(&i,&j,&e)){//按任意次序輸入非零元if(!(p=(OLNode*)malloc(sizeof(OLNode)))) exit(OVERFLOW);p->row=i; //生成新結(jié)點的行號域p->col=j; //生成新結(jié)點的列號域p->value=e; //生成新結(jié)點的值域46M->row_head[]=NULL;//初始化行頭指針向量;令各行鏈表為空鏈表M->col_head[]=NULL;//初始化列頭指針向量;令各列鏈表為空鏈表if(M->row_head[i]==NULL){M->row_head[i]=p;p->right=NULL;}else{for(q=M->row_head[i];(q->right)&&q->right->col<j; q=q->right); p->right=q->right;q->right=p;}//完成行插入elseif(M->row_head[i]->col>j){//尋找在行表中的插入位置 p->right=M->row_head[i];M->row_head[i]=p;}47if(M->col_head[j]==NULL){ M_col_head[j]=p;p->down=NULL;}else{for(q=M->col_head[j];(q->down)&&q->down->row<i; q=q->down); p->down=q->down;q->down=p;}//完成列插入elseif(M->col_head[j]->row>i){//尋找在列表中的插入位置p->down=M->row_head[j];M->col_head[j]=p;}}//for結(jié)束
returnOK;}//CreateSMatrix_OL48∧∧∧∧∧∧∧M->col_headM->row_head(1)輸入(1,1,3)1∧13∧p(2)輸入(1,3,5)p135q∧(3)輸入(1,4,9)∧149pq∧∧(4)輸入(3,1,2)312∧p∧q49(5)輸入(2,3,4)234q∧∧(6)輸入(2,2,8)q創(chuàng)建稀疏矩陣M
的十字鏈表if(M.rhead[i]==NULL){M.rhead[i]=p;p->right=NULL;}for(q=M->col_head[i];(q->down)&&q->down->row<i; q=q->down);p->down=q->down;q->down=p;if(M->row_head[i]->j>j){p->right=M->row_head[i];M->row_head[i]=p;}if(M->col_head[j]==NULL){M->col_head[j]=p;p->down=NULL;}pq∧p228if(M->col_head[j]==NULL){M->col_head[j]=p;p->down=NULL;}for(q=M->row_head[i];(q->right)&&q->right->col<j; q=q->right);p->right=q->right;q->right=p;if(M->col_head[j]==NULL){M->col_head[j]=p;p->down=NULL;}for(q=M->row_head[i];(q->right)&&q->right->col<j; q=q->right);p->right=q->right;q->right=p;if(M->col_head[j]==NULL){M->col_head[j]=p;p->down=NULL;}if(M->row_head[i]==NULL){M->row_head[i]=p;p->right=NULL;}for(q=M->col_head[i];(q->down)&&q->down->row<i; q=q->down);p->down=q->down;q->down=p;if(M->row_head[i]==NULL){M->row_head[i]=p;p->right=NULL;}對于一個m
行n
列,并且有t
個非零元的稀疏矩陣,CreateSMatrix_OL算法執(zhí)行時間為O(t×s),其中s=max{m,n}。這是因為:每建立一個非零元的結(jié)點時都需要尋查它在行表和列表中的插入位置,此算法對非零元輸入的先后次序沒有任何要求。反之,若按以行序為主序的次序依次輸入三元組,即可以將建立十字鏈表表示的算法改寫成O(t)數(shù)量級的(t
為非零元個數(shù))的算法。②算法分析50廣義表(generalizedlist)是線性表的推廣,有時也稱為列表(lists,用復(fù)數(shù)形式以示與統(tǒng)稱的表list的區(qū)別)。廣泛地應(yīng)用于人工智能等領(lǐng)域的LISP(表處理語言),把廣義表作為基本的數(shù)據(jù)結(jié)構(gòu),就連程序也表示為一系列的廣義表。515.4廣義表廣義表的邏輯結(jié)構(gòu)和數(shù)組一樣,廣義表也可以看成是線性表在下述含義上的擴(kuò)展:表中的數(shù)據(jù)元素本身也是一種數(shù)據(jù)結(jié)構(gòu)。52廣義表的存儲結(jié)構(gòu)53 5.4.1廣義表的邏輯結(jié)構(gòu)廣義表一般記作:GL=(a1,a2,…,an)其中:
n
是廣義表GL
的長度;
ai 可以是單個元素,也可以是廣義表,分別稱為廣義表GL
的原子和子表,習(xí)慣上用大寫字母表示廣義表的名稱,用小寫字母表示原子的名稱。GL
是廣義表(a1,a2,…,an)的名稱;1.廣義表的定義54當(dāng)廣義表GL為非空時,稱第一個元素a1
為GL的表頭(head),其余元素組成的表(a2,a3,…,an)是GL的表尾(tail)。顯然,廣義表的定義是一個遞歸的定義,因為在描述廣義表時又用到了廣義表的概念。
例5-1
A=(),A
是一個空表,它的長度為零。
例5-2
B=(e),B
只有一個原子e,它的長度為1。
例5-3
C=(a,(b,c,d)),C
的長度為2,兩個元素分別為原子a
和子表(b,c,d)。
例5-4
D=(A,B,C),D
的長度為3,三個元素分別為A、B和C,都是廣義表。顯然,將上面所述三個子表的值代入以后,則有D=((),(e),(a,(b,c,d)))。
例5-5
E=(a,E),這是一個遞歸表,它的長度為2,E相當(dāng)于一個無限的廣義表E=(a,(a,(a,…)))。552.廣義表的三個重要結(jié)論從上述定義和例子推出如下廣義表的三個重要結(jié)論(1)廣義表的元素可以是子表,而子表的元素還可以是子表,…。由此,廣義表是一個多層次結(jié)構(gòu)。(2)廣義表可以為其他廣義表所共享。例如在上述例子中,廣義表A、B
和C
為D
的子表,則在D
中可以不必列出廣義表的值,而是通過子表的名稱引用。(3)廣義表可以是一個遞歸表,即廣義表也可以是其本身的一個子表。例如廣義表E
就是一個遞歸的表。56ecdbaBACD表示廣義表表示原子57
和線性表相類似,可以對廣義表進(jìn)行的操作有查找、插入、刪除和取表元素等。由于廣義表在結(jié)構(gòu)上較線性表復(fù)雜的多,因此,廣義表操作的實現(xiàn)也不如線性表簡單。在這些操作中,最重要的兩個基本操作是:(1)取廣義表表頭GetHead:表中的第一個元素為此表的表頭。(2)取廣義表表尾GetTail:表中除第一個元素外的其余元素組成的表為此表
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 百色九年級數(shù)學(xué)試卷
- Unit 6 Food Lesson 1(說課稿)-2024-2025學(xué)年人教精通版(2024)英語三年級上冊
- 普陀區(qū)管道清洗施工方案
- 安徽會考數(shù)學(xué)試卷
- 茶山中學(xué)九年級數(shù)學(xué)試卷
- 部編八下歷史第五單元國防建設(shè)與外交成就第17課《外交事業(yè)的發(fā)展》聽課評課記錄
- 經(jīng)濟(jì)學(xué)開題報告
- 湘教版數(shù)學(xué)九年級下冊《2.5.2圓切線》聽評課記錄4
- 湘教版數(shù)學(xué)九年級上冊第二章《一元二次方程》復(fù)習(xí)聽評課記錄
- 2025年度裝配式建筑預(yù)制構(gòu)件生產(chǎn)與安裝合同
- Before Sunrise 愛在黎明破曉時
- MotionView-MotionSolve應(yīng)用技巧與實例分析
- 碳納米管應(yīng)用研究
- 投標(biāo)聲明書模板
- 運(yùn)動技能學(xué)習(xí)與控制課件第十一章運(yùn)動技能的練習(xí)
- 蟲洞書簡全套8本
- 幼兒園幼兒園小班社會《兔奶奶生病了》
- 設(shè)備管理試題庫含答案
- 2023年《反電信網(wǎng)絡(luò)詐騙法》專題普法宣傳
- 小學(xué)數(shù)學(xué)五年級上、下冊口算題大全
- 和平精英電競賽事
評論
0/150
提交評論