




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1第第5章章 數(shù)組和廣義表(數(shù)組和廣義表(Arrays & Lists)5.1 數(shù)組的定義數(shù)組的定義5.2 數(shù)組的順序表示和實現(xiàn)數(shù)組的順序表示和實現(xiàn)5.3 矩陣的壓縮存儲矩陣的壓縮存儲(即數(shù)組的應(yīng)用即數(shù)組的應(yīng)用)5.4 廣義表的定義廣義表的定義5.5 廣義表的存儲結(jié)構(gòu)廣義表的存儲結(jié)構(gòu)2線性表線性表具有相同類型的數(shù)據(jù)元素的有限序列。具有相同類型的數(shù)據(jù)元素的有限序列。限制插入、刪除位置限制插入、刪除位置線性表線性表具有相同類型的數(shù)據(jù)元素的有限序列。具有相同類型的數(shù)據(jù)元素的有限序列。限制元素類型為字符限制元素類型為字符棧棧僅在表尾進行插入和刪除操作的線性表。僅在表尾進行插入和刪除操作的線性表
2、。隊列隊列在一端進行插入操作,而另一端進行在一端進行插入操作,而另一端進行 刪除操作的線性表。刪除操作的線性表。串串零個或多個字符組成的有限序列零個或多個字符組成的有限序列 。特殊線性表特殊線性表第第5章章 數(shù)組和廣義表數(shù)組和廣義表 3線性表線性表具有相同類型的數(shù)據(jù)元素的有限序列。具有相同類型的數(shù)據(jù)元素的有限序列。將元素的類型進行擴充將元素的類型進行擴充廣義線性表廣義線性表(多維)數(shù)組(多維)數(shù)組線性表中的數(shù)據(jù)元素可以是線性表中的數(shù)據(jù)元素可以是線性表,但所有元素的類型相同。線性表,但所有元素的類型相同。廣義表廣義表線性表中的數(shù)據(jù)元素可以是線性表,線性表中的數(shù)據(jù)元素可以是線性表,且元素的類型可以
3、不相同。且元素的類型可以不相同。第第5章章 數(shù)組和廣義表數(shù)組和廣義表 45.1 數(shù)組的定義數(shù)組的定義數(shù)組是由一組數(shù)組是由一組類型相同類型相同的數(shù)據(jù)元素構(gòu)成的的數(shù)據(jù)元素構(gòu)成的有序有序集集合合,每個數(shù)據(jù)元素稱為一個數(shù)組元素(簡稱為元每個數(shù)據(jù)元素稱為一個數(shù)組元素(簡稱為元素),每個元素受素),每個元素受n(n1)個個線性關(guān)系線性關(guān)系的約束,的約束,每每個元素在個元素在n個線性關(guān)系中的序號個線性關(guān)系中的序號i1、i2、in稱為稱為該元素的下標(biāo),并稱該數(shù)組為該元素的下標(biāo),并稱該數(shù)組為 n 維數(shù)組。維數(shù)組。 數(shù)組的特點數(shù)組的特點元素本身可以具有某種結(jié)構(gòu),屬于同一數(shù)據(jù)類型;元素本身可以具有某種結(jié)構(gòu),屬于同一
4、數(shù)據(jù)類型;數(shù)組是一個具有固定格式和數(shù)量的數(shù)據(jù)集合。數(shù)組是一個具有固定格式和數(shù)量的數(shù)據(jù)集合。5 a11 a12 a1n a21 a22 a2n am1 am2 amnA=例如,元素例如,元素a22受兩個線性關(guān)系的約束,在行上有受兩個線性關(guān)系的約束,在行上有一個行前驅(qū)一個行前驅(qū)a21和一個行后繼和一個行后繼a23,在列上有一個列,在列上有一個列前驅(qū)前驅(qū)a12和和一個列后繼和和一個列后繼a32。數(shù)組示例數(shù)組示例5.1 數(shù)組的定義數(shù)組的定義6 a11 a12 a1n a21 a22 a2n am1 am2 amnA= A=(A1,A2,An) 其中:其中: Ai=(a1i,a2i,ami) (1in)
5、二維數(shù)組是數(shù)據(jù)元素為線性表的線性表。二維數(shù)組是數(shù)據(jù)元素為線性表的線性表。5.1 數(shù)組的定義數(shù)組的定義7ADT Array 數(shù)據(jù)對象數(shù)據(jù)對象: Daj1,j2, .,ji,jn| ji =0,.,bi -1, i=1,2,.,n 數(shù)據(jù)關(guān)系數(shù)據(jù)關(guān)系: RR1, R2, ., Rn Ri | 0 jk bk -1, 1 k n 且且k i, 0 ji bi -2, i=2,.,n ADT Array 基本操作基本操作:5.1 數(shù)組的定義數(shù)組的定義8二維數(shù)組的定義二維數(shù)組的定義:數(shù)據(jù)對象數(shù)據(jù)對象: : D = aij | 0ib1-1, 0 jb2-1數(shù)據(jù)關(guān)系數(shù)據(jù)關(guān)系: : R = ROW, COL
6、ROW = | 0ib1-2, 0jb2-1 COL = | 0ib1-1, 0 jb2-29基本操作基本操作:InitArray (&A, n, bound1, ., boundn)DestroyArray(&A)操作結(jié)果:操作結(jié)果:若維數(shù)若維數(shù) n 和各維長度合法,則構(gòu)造相應(yīng)的和各維長度合法,則構(gòu)造相應(yīng)的 數(shù)組數(shù)組A,并返回,并返回OK。操作結(jié)果:操作結(jié)果:銷毀數(shù)組銷毀數(shù)組A。10Value(A, &e, index1, ., indexn) 初始條件:初始條件:A是是n維數(shù)組,維數(shù)組,e為元素變量,隨后是為元素變量,隨后是n 個個 下標(biāo)值。下標(biāo)值。 操作結(jié)果:操作
7、結(jié)果:若各下標(biāo)不超界,則若各下標(biāo)不超界,則e賦值為所指定的賦值為所指定的A 的元素值,并返回的元素值,并返回OK。Assign(&A, e, index1, ., indexn)初始條件:初始條件:A是是n維數(shù)組,維數(shù)組,e為元素變量,隨后是為元素變量,隨后是n 個下個下 標(biāo)值。標(biāo)值。操作結(jié)果:操作結(jié)果:若下標(biāo)不超界,則將若下標(biāo)不超界,則將e的值賦給所指定的的值賦給所指定的A的的 元素,并返回元素,并返回OK?;静僮骰静僮鳎?1數(shù)組的基本操作數(shù)組的基本操作 存?。航o定一組下標(biāo),讀出對應(yīng)的數(shù)組元素;存?。航o定一組下標(biāo),讀出對應(yīng)的數(shù)組元素; 修改:給定一組下標(biāo),存儲或修改與其相對應(yīng)的修
8、改:給定一組下標(biāo),存儲或修改與其相對應(yīng)的數(shù)組元素。數(shù)組元素。存取和修改操作本質(zhì)上只對應(yīng)一種操作存取和修改操作本質(zhì)上只對應(yīng)一種操作尋址尋址數(shù)組應(yīng)該采用何種方式存儲?數(shù)組應(yīng)該采用何種方式存儲?數(shù)組沒有插入和刪除操作,所以,不用預(yù)留空間,數(shù)組沒有插入和刪除操作,所以,不用預(yù)留空間,適合采用順序存儲。適合采用順序存儲。5.1 數(shù)組的定義數(shù)組的定義12類型特點類型特點:1) 只有引用型操作,沒有加工型操作只有引用型操作,沒有加工型操作;2) 數(shù)組是多維的結(jié)構(gòu),而存儲空間是一數(shù)組是多維的結(jié)構(gòu),而存儲空間是一個個 一維的結(jié)構(gòu)。一維的結(jié)構(gòu)。有兩種順序映象的方式有兩種順序映象的方式:1)以行序為主序以行序為主序
9、(低下標(biāo)優(yōu)先低下標(biāo)優(yōu)先);2)以列序為主序以列序為主序(高下標(biāo)優(yōu)先高下標(biāo)優(yōu)先);5.2 數(shù)組的順序表示和實現(xiàn)數(shù)組的順序表示和實現(xiàn) 135.2 數(shù)組的順序表示和實現(xiàn)數(shù)組的順序表示和實現(xiàn)一維一維設(shè)一維數(shù)組的下標(biāo)的范圍為閉區(qū)間設(shè)一維數(shù)組的下標(biāo)的范圍為閉區(qū)間l,h,每個每個數(shù)組元素占用數(shù)組元素占用 c 個存儲單元,則個存儲單元,則其其任一元任一元素素 ai 的的存儲地址可由下式確定:存儲地址可由下式確定: Loc(ai)Loc(al) (il)c c al ai-1 ai ah al+1 Loc(al)Loc(ai)14常用的映射方法有兩種:常用的映射方法有兩種:按按行行優(yōu)先:優(yōu)先:先行后列先行后列,
10、先存儲行號較小的元素,先存儲行號較小的元素,行號相同者先存儲列號較小的元素。行號相同者先存儲列號較小的元素。 按按列列優(yōu)先:優(yōu)先:先列后行先列后行,先存儲列號較小的元素,先存儲列號較小的元素,列號相同者先存儲行號較小的元素。列號相同者先存儲行號較小的元素。 二維數(shù)組二維數(shù)組內(nèi)內(nèi) 存存二維結(jié)構(gòu)二維結(jié)構(gòu)一維結(jié)構(gòu)一維結(jié)構(gòu)5.2 數(shù)組的順序表示和實現(xiàn)數(shù)組的順序表示和實現(xiàn)二維二維15l2h2 l1h1(a) 二維數(shù)組二維數(shù)組aij前面的元素個數(shù)前面的元素個數(shù)=陰影部分的面積陰影部分的面積=整行數(shù)每行元素個數(shù)整行數(shù)每行元素個數(shù)+本行中本行中aij前面的元素個數(shù)前面的元素個數(shù)=( (i - -l1) )(
11、(h2 - -l21) )( (j - -l2) )本行中本行中aij前面的元素個數(shù)前面的元素個數(shù)每行元素個數(shù)每行元素個數(shù)整整行行數(shù)數(shù)aij按行優(yōu)先存儲的尋址按行優(yōu)先存儲的尋址5.2 數(shù)組的順序表示和實現(xiàn)數(shù)組的順序表示和實現(xiàn)二維二維16第第l1行行第第l1+1行行al1l2 al1h2 a(l1+1)l2 a(l1+1)h2 aij ah1h2Loc( (aij) )Loc( (al1l2) )( (i - -l1) )( (h2 - -l21) )( (j - -l2) )個元素個元素Loc(aij)Loc(al1l2)(il1)(h2l21)(jl2)c按行優(yōu)先存儲的尋址按行優(yōu)先存儲的尋址
12、按列優(yōu)先存儲的尋址方法與此類似。按列優(yōu)先存儲的尋址方法與此類似。5.2 數(shù)組的順序表示和實現(xiàn)數(shù)組的順序表示和實現(xiàn)二維二維17Loc (j1, j2, jn)=LOC(0,0,0)若是若是N維數(shù)組,其中任一元素的地址該如何計算?維數(shù)組,其中任一元素的地址該如何計算?niii1jC其中其中Cn=L, Ci-1=biCi, 1in Ci = bi+1 bi+2 bn L一個元素長度一個元素長度數(shù)組基址數(shù)組基址前面若干元素占用前面若干元素占用的地址字節(jié)總數(shù)的地址字節(jié)總數(shù)第第i i維長度維長度與所存元素個數(shù)有關(guān)的系與所存元素個數(shù)有關(guān)的系數(shù),可用遞推法求出數(shù),可用遞推法求出教材已給出教材已給出低維優(yōu)先低維
13、優(yōu)先的地址計算公式,的地址計算公式,見見P93(5-2)式式該式稱為該式稱為n n維數(shù)組的映像函數(shù)維數(shù)組的映像函數(shù): C i = b i+1 b i+2 b n L5.2 數(shù)組的順序表示和實現(xiàn)數(shù)組的順序表示和實現(xiàn)NN維維18“行序為主序行序為主序” 即即 “低下標(biāo)優(yōu)低下標(biāo)優(yōu)先先”“列序為主序列序為主序” 即即 “高下標(biāo)優(yōu)高下標(biāo)優(yōu)先先”如如: A324 的存儲次序為的存儲次序為:(0,0,0),(0,0,1),(0,0,2),(0,0,3),(0,1,0),(0,1,3),(1,0,0),(1,1,0),(1,1,3),(2,0,0),(2,1,3)(0,0,0),(1,0,0),(2,0,0)
14、,(0,1,0),(2,1,0),(0,0,1),(0,1,1),(0,0,2),(2,1,2),(0,0,3),(2,1,3)則則 A324 的存儲次序為的存儲次序為:19例例2:已知二維數(shù)組已知二維數(shù)組Am,m按行存儲的元素地址公式是:按行存儲的元素地址公式是: Loc(aij)= Loc(a11)+(i-1)*m+(j-1)*K 按列存儲的公式是?按列存儲的公式是? Loc(aij)=Loc(a11)+(j-1)*m+(i-1)*K (盡管是方陣,但公式仍不同)(盡管是方陣,但公式仍不同)例例1軟考題軟考題:一個二維數(shù)組一個二維數(shù)組A A,行下標(biāo)的范圍是,行下標(biāo)的范圍是1到到6, 列下標(biāo)
15、的范圍是列下標(biāo)的范圍是0到到7,每個數(shù)組元素用相鄰的,每個數(shù)組元素用相鄰的6個字節(jié)存?zhèn)€字節(jié)存儲,存儲器按字節(jié)編址。那么,這個數(shù)組的體積是多少儲,存儲器按字節(jié)編址。那么,這個數(shù)組的體積是多少個字節(jié)?個字節(jié)? 288答:答: Volume=m*n*L=(6-1+1)*(7- 0 +1)*6=48*6=288練習(xí):練習(xí):20例例3:設(shè)數(shù)組設(shè)數(shù)組a160, 170的基地址為的基地址為2048,每個元,每個元素占素占2個存儲單元,若以列序為主序順序存儲,則元素個存儲單元,若以列序為主序順序存儲,則元素a32,58的存儲地址為的存儲地址為 。LOC(aij)=LOC(ac1,c2)+(j-c2)*(d1-
16、c1+1)+i-c1)*L得:得:LOC(a32,58)=2048+(58-1)*(60-1+1)+32-1)*28950答:答:請注意審題!請注意審題! 利用列優(yōu)先通式:利用列優(yōu)先通式:8950練習(xí):練習(xí):21#define MAX_ARRAY_DIM 8 /假設(shè)最大維數(shù)為假設(shè)最大維數(shù)為8 8 typedef struct ELemType *base; /數(shù)組元素基址數(shù)組元素基址 int dim; /數(shù)組維數(shù)數(shù)組維數(shù) int *bound; /數(shù)組數(shù)組各維長度信息保存區(qū)各維長度信息保存區(qū)基址基址 int *constants; /數(shù)組數(shù)組映像函數(shù)常量映像函數(shù)常量的基址的基址 Array;即
17、即Ci信息保存區(qū)信息保存區(qū)數(shù)組的基本操作函數(shù)說明(有數(shù)組的基本操作函數(shù)說明(有4個)個)(請閱讀教材(請閱讀教材P93-95)N維數(shù)組的順序存儲表示(見教材見教材P93)以銷毀數(shù)組函數(shù)為例以銷毀數(shù)組函數(shù)為例22 :利用宏利用宏va_start、va_arg和和va_end提供提供遍歷未知數(shù)目和類型的函數(shù)參數(shù)表的功能。遍歷未知數(shù)目和類型的函數(shù)參數(shù)表的功能。Va_start ( va_list ap, x ):初始化初始化ap,使其指向所,使其指向所在函數(shù)的參數(shù)在函數(shù)的參數(shù)x x之后的第一個參數(shù)。之后的第一個參數(shù)。Va_arg ( va_list ap , 類型類型):返回返回apap當(dāng)前指向的參
18、數(shù)當(dāng)前指向的參數(shù)的值,并修改的值,并修改ap,使得,使得ap指向下一個參數(shù)(指向下一個參數(shù)(“類型類型”為參數(shù)類型)。為參數(shù)類型)。Va_end ( va_list ap):用在所有的參數(shù)處理完畢之后,用在所有的參數(shù)處理完畢之后,表示表示ap使用完畢。使用完畢。幾個函數(shù)說明:幾個函數(shù)說明:23Status InitArray (Array &A, int dim,) /若維數(shù)若維數(shù)dim和各維長度合法,則和各維長度合法,則并返回并返回OK if (dimMAX_ARRAY_DIM) return ERROR; A.dim=dim; A.bounds=(int *)malloc(dim
19、* sizeof(int); if(!a.bounds) exit (OVERFLOW); / 分配存放分配存放“各維長度各維長度”的空間的空間 /若各維長度合法,則存入若各維長度合法,則存入A.bounds, ,并求出并求出A的元素總數(shù)的元素總數(shù)elemtotal elemtotal=1; va_start(ap, dim); /ap為為va_list類型,是存放變長參數(shù)表信息的類型,將類型,是存放變長參數(shù)表信息的類型,將ap指指向向dim后后的第一個參數(shù)的第一個參數(shù)數(shù)組的基本操作函數(shù)說明(數(shù)組的基本操作函數(shù)說明(5個)個) (見教材見教材P93-95)24 for(i=0;idim;+i)
20、 A.boundsi=va_arg (ap, int); / 返回返回ap當(dāng)前指向的參數(shù),并按參數(shù)類型將當(dāng)前指向的參數(shù),并按參數(shù)類型將ap指向下一個參數(shù)指向下一個參數(shù) if (A.boundsi=0;-i) A.constantsi=A.boundsi+1*A.constantsi+1; return OK; b i+1 C i+1 26數(shù)組基址指針數(shù)組基址指針各維長度保各維長度保存區(qū)指針存區(qū)指針映像函數(shù)映像函數(shù)Ci保存區(qū)指針保存區(qū)指針Status DestroyArray (Array &A) /銷毀數(shù)組銷毀數(shù)組A A if ( ! A.base ) return ERROR; fr
21、ee(A.base); A .base = NULL; if ( ! A.bounds ) return ERROR; free( A .bounds ); A.bounds = NULL; if ( !A.constants ) return ERROR; free ( A. constants ) ; A. constants = NULL; return OK; 數(shù)組的基本操作函數(shù)數(shù)組的基本操作函數(shù) 27Status Locate(Array A, va_list ap, int &off) /若若ap指示的各下標(biāo)值合法,則求出該元素在指示的各下標(biāo)值合法,則求出該元素在A中相對地
22、址中相對地址off off=0; for(i=0;iA.dim;+i) ind= va_arg(ap, int); if (indA.boundsi) return OVERFLOW; off += A.constantsi * ind ; C i j i return OK; 數(shù)組的基本操作函數(shù)數(shù)組的基本操作函數(shù) 28Status Value(Array A, ElemType &e,) /A是是n n維數(shù)組,維數(shù)組,e e為元素變量,隨后是為元素變量,隨后是n n個下標(biāo)值,若各下個下標(biāo)值,若各下 標(biāo)不超界,則標(biāo)不超界,則e e賦值為所指定的賦值為所指定的A A的元素值,即將指定元素
23、的元素值,即將指定元素 值讀到值讀到e e變量中。變量中。 va_start (ap, e); / / 將將apap指向指向e e后的參數(shù)后的參數(shù) if (result=Locate(A, ap, off)=0) return result; e=*(A.base+off); return OK; 數(shù)組的基本操作函數(shù)數(shù)組的基本操作函數(shù) 29Status Assign(Array &A,ElemType e,) /A是是n n維數(shù)組,維數(shù)組,e e為元素變量,隨后是為元素變量,隨后是n n個下標(biāo)值,若各下個下標(biāo)值,若各下 標(biāo)不超界,則標(biāo)不超界,則e e的值賦為所指定的的值賦為所指定的A
24、A的元素值,的元素值, va_start(ap,e); if( (result=Locate(A,ap,off ) )=0) return result; *(A.base+off)=e; return OK; 數(shù)組的基本操作函數(shù)數(shù)組的基本操作函數(shù) 30行指針向量行指針向量a11a12a1nam1am2amn 鏈?zhǔn)酱鎯Ψ绞剑烘準(zhǔn)酱鎯Ψ绞剑河脦兄羔樝蛄康膯捂湵韥肀硎?。用帶行指針向量的單鏈表來表示。注:注:?shù)組的運算參見下一節(jié)實例(稀疏矩陣的轉(zhuǎn)置)數(shù)組的運算參見下一節(jié)實例(稀疏矩陣的轉(zhuǎn)置)補充:補充: 315.3 矩陣的壓縮存儲一一. 特殊矩陣的壓縮存儲特殊矩陣的壓縮存儲 二二. 稀疏矩陣的壓縮
25、存儲稀疏矩陣的壓縮存儲三三. 稀疏矩陣的轉(zhuǎn)置操作稀疏矩陣的轉(zhuǎn)置操作 325.3 矩陣的壓縮存儲討論:討論:1. 什么是壓縮存儲?什么是壓縮存儲?若多個數(shù)據(jù)元素的若多個數(shù)據(jù)元素的值都相同值都相同,則只分配一個元素值的,則只分配一個元素值的存儲空間,且零元素不占存儲空間。存儲空間,且零元素不占存儲空間。2. 什么樣的矩陣具備壓縮條件?什么樣的矩陣具備壓縮條件? 特殊矩陣(對稱矩陣,對角矩陣,三角矩陣)特殊矩陣(對稱矩陣,對角矩陣,三角矩陣)和稀疏矩陣。和稀疏矩陣。33特殊矩陣:特殊矩陣:矩陣中很多值相同的元素并且它們的分布矩陣中很多值相同的元素并且它們的分布有一定的規(guī)律。有一定的規(guī)律。稀疏矩陣稀疏
26、矩陣: :矩陣中非零元素的個數(shù)較少(一般小于矩陣中非零元素的個數(shù)較少(一般小于5%)壓縮存儲的基本思想是:壓縮存儲的基本思想是: 為多個值為多個值相同相同的元素只分配的元素只分配一個一個存儲空間;存儲空間; 對對零零元素元素不分配不分配存儲空間。存儲空間。 特殊矩陣和稀疏矩陣特殊矩陣和稀疏矩陣5.3 矩陣的壓縮存儲34一一. 特殊矩陣的壓縮存儲特殊矩陣的壓縮存儲對稱矩對稱矩陣陣 3647862842481697460582957A對稱矩陣特點:對稱矩陣特點:aij=aji如何壓縮存儲?如何壓縮存儲?只存儲下三角部分的元素。只存儲下三角部分的元素。35(a) 下三角矩陣下三角矩陣 (b) 存儲說
27、明存儲說明 (c) 計算方法計算方法aij在一維數(shù)組中的序號在一維數(shù)組中的序號=陰影部分的面積陰影部分的面積= i( (i+1) )/2+ j+1一維數(shù)組下標(biāo)從一維數(shù)組下標(biāo)從0開始開始aij在一維數(shù)組中的下標(biāo)在一維數(shù)組中的下標(biāo)k= i( (i+1) )/2+ j 0 in- -10 j n- -1 aij每行元素個數(shù)每行元素個數(shù)12iaij在本行中的序號在本行中的序號aij第第0行行第第1行行第第i-1行行一一. 特殊矩陣的壓縮存儲特殊矩陣的壓縮存儲對稱矩對稱矩陣陣 36對于對于下三角下三角中的元素中的元素aij(ij),在數(shù)組,在數(shù)組SA中的下標(biāo)中的下標(biāo)k與與i、j的關(guān)系為:的關(guān)系為:ki(
28、i1)/2j 。上三角上三角中的元素中的元素aij(ij),),因為因為aijaji,則訪問和則訪問和它對應(yīng)的元素它對應(yīng)的元素aji即可,即:即可,即:kj(j1)/2i 。第第1行行第第n-1行行第第0行行 a00 a10 a11 a20 a21 a22 aij a n-10 an-11 an-1n-1 第第2行行0 1 2 3 4 5 k n(n+1)/2-1一一. 特殊矩陣的壓縮存儲特殊矩陣的壓縮存儲對稱矩對稱矩陣陣 37一一. 特殊矩陣的壓縮存儲特殊矩陣的壓縮存儲三角矩陣三角矩陣 3 cc c c6 2c c c4 81 c c7 46 0 c8 29 5 7(a)下三角矩陣下三角矩陣
29、3 4 8 1 0c2 9 4 6cc 5 7cc c 0 8cc c c 7(b)上三角矩陣上三角矩陣如何壓縮存儲?如何壓縮存儲?只存儲上三角(或下三角)部分的元素。只存儲上三角(或下三角)部分的元素。38矩陣中任一元素矩陣中任一元素aij在在數(shù)組數(shù)組中的下標(biāo)中的下標(biāo)k與與i、j的對應(yīng)關(guān)系:的對應(yīng)關(guān)系:i( (i1) )/2j 當(dāng)當(dāng)ijn( (n1) )/2 當(dāng)當(dāng)ijk=下三角矩陣的壓縮存儲下三角矩陣的壓縮存儲0 1 2 3 4 5 k n(n+1)/2第第1行行第第0行行 a00 a10 a11 a20 a21 aij an-1n-1 第第2行行 c a22存儲存儲下三角下三角元素元素對角
30、線上方的常數(shù)對角線上方的常數(shù)只存一個只存一個一一. 特殊矩陣的壓縮存儲特殊矩陣的壓縮存儲三角矩陣三角矩陣 39矩陣中任一元素矩陣中任一元素aij在在數(shù)組數(shù)組中的下標(biāo)中的下標(biāo)k與與i、j的對應(yīng)關(guān)系:的對應(yīng)關(guān)系: i( (2ni1) )/2ji 當(dāng)當(dāng)ijn( (n1) ) /2 當(dāng)當(dāng)ijk=上三角矩陣的壓縮存儲上三角矩陣的壓縮存儲存儲存儲上三角上三角元素元素對角線上方的常數(shù)對角線上方的常數(shù)只存一個只存一個一一. 特殊矩陣的壓縮存儲特殊矩陣的壓縮存儲三角矩陣三角矩陣 40對角矩陣:對角矩陣:所有非零元素都集中在以主對角線為中心所有非零元素都集中在以主對角線為中心的帶狀區(qū)域中,除了主的帶狀區(qū)域中,除了
31、主對角線和它的上下方若干條對對角線和它的上下方若干條對角線的元素外,所有其他元素都為零。角線的元素外,所有其他元素都為零。 a00 a01 0 0 0a10 a11 a12 0 00 a21 a22a23 00 0 a32a33 a340 0 0 a43 a44A=一一. 特殊矩陣的壓縮存儲特殊矩陣的壓縮存儲對角矩陣對角矩陣 41a00 a01 0 0 0a10 a11 a12 0 00 a21 a22a23 00 0 a32a33 a340 0 0 a43 a44A=將帶狀區(qū)將帶狀區(qū)域立起來域立起來0 a00a01a10 a11 a12a21 a22 a23a32 a33 a34a43 a4
32、4 0B=sj- -i+1t=i映射到二維數(shù)組映射到二維數(shù)組B中,映射關(guān)系中,映射關(guān)系一一. 特殊矩陣的壓縮存儲特殊矩陣的壓縮存儲對角矩陣對角矩陣 42按行按行存儲存儲 元素元素aij在一維數(shù)組中的序號在一維數(shù)組中的序號=2 + 3( (i1) )+( ( ji + 2) )=2i+ j+1 一維數(shù)組下標(biāo)從一維數(shù)組下標(biāo)從0開始開始元素元素aij在一維數(shù)組中的下標(biāo)在一維數(shù)組中的下標(biāo)=2i+ j(b) 尋址的計算方法尋址的計算方法(c) 壓縮到一維數(shù)組中壓縮到一維數(shù)組中a00 a01 a10 a11 a12 a21 a22 a23 a32 a33 a34 a43 a440 1 2 3 4 5 6
33、7 8 9 10 11 12(a) 三對角矩陣三對角矩陣 0 0 0 0 00 00 0 0 0 0 A=a00 a01a10 a11 a12a21 a22 a23a32 a33 a34a43 a44一一. 特殊矩陣的壓縮存儲特殊矩陣的壓縮存儲對角矩陣對角矩陣 43二、稀疏矩陣的壓縮存儲二、稀疏矩陣的壓縮存儲問題:問題:如果只存儲如果只存儲稀疏矩陣中的非零元素,那這些元素的稀疏矩陣中的非零元素,那這些元素的位置信息位置信息該如何表示?該如何表示?解決思路:解決思路:對每個非零元素對每個非零元素增開增開若干存儲單元,例如存放其所若干存儲單元,例如存放其所在的行號和列號,便可準(zhǔn)確反映該元素所在位置
34、。在的行號和列號,便可準(zhǔn)確反映該元素所在位置。實現(xiàn)方法:實現(xiàn)方法:將每個非零元素用一個三元組將每個非零元素用一個三元組(i,j,aij)來表示,來表示,則每個則每個稀疏矩陣可用一個稀疏矩陣可用一個三元組表三元組表來表示。來表示。44將稀疏矩陣中的每個非零元素表示為將稀疏矩陣中的每個非零元素表示為:( (行號,列號,非零元素值行號,列號,非零元素值) )三元組三元組定義三元組:定義三元組:二、稀疏矩陣的壓縮存儲二、稀疏矩陣的壓縮存儲#define MAXSIZE 125000 /設(shè)非零元素最大個數(shù)設(shè)非零元素最大個數(shù)125000 typedef struct int i; /元素行號元素行號 in
35、t j; /元素列號元素列號 ElemType e; /元素值元素值 Triple;/一個結(jié)點的結(jié)構(gòu)定義一個結(jié)點的結(jié)構(gòu)定義45三元組表三元組表:將稀疏矩陣的非零元素對應(yīng)的三元組所將稀疏矩陣的非零元素對應(yīng)的三元組所構(gòu)成的集合,構(gòu)成的集合,按行優(yōu)先的順序排列成一個線性表。按行優(yōu)先的順序排列成一個線性表。三元組表三元組表( (0,0,15), (1,1,11), (2,3,6), (4,0,9) )15 0 0 0 0 0 0 11 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 9 0 0 0 0 0A=如何存儲三元組表?如何存儲三元組表?二、稀疏矩陣的壓縮存儲二、稀疏矩陣的壓縮存
36、儲46稀疏矩陣的壓縮存儲稀疏矩陣的壓縮存儲三元組順序表三元組順序表二、稀疏矩陣的壓縮存儲二、稀疏矩陣的壓縮存儲typedef struct Triple dataMAXSIZE+1; /三元組表,以行為主序存入一維向量三元組表,以行為主序存入一維向量 data 中中 int mu; /矩陣總行數(shù)矩陣總行數(shù) int nu; /矩陣總列數(shù)矩陣總列數(shù) int tu; /矩陣中非零元素總個數(shù)矩陣中非零元素總個數(shù) TsMatrix; /整個三元組表的定義整個三元組表的定義47采用采用鏈接鏈接存儲結(jié)構(gòu)存儲三元組表,每個非零元素對應(yīng)存儲結(jié)構(gòu)存儲三元組表,每個非零元素對應(yīng)的三元組存儲為一個鏈表結(jié)點,結(jié)構(gòu)為:的
37、三元組存儲為一個鏈表結(jié)點,結(jié)構(gòu)為: rowcolitemdownrightrow:存儲非零元素的行號存儲非零元素的行號col:存儲非零元素的列號存儲非零元素的列號item:存儲非零元素的值存儲非零元素的值right:指針域,指向同一行中的下一個三元組指針域,指向同一行中的下一個三元組down:指針域,指向同一列中的下一個三元組指針域,指向同一列中的下一個三元組稀疏矩陣的壓縮存儲稀疏矩陣的壓縮存儲十字鏈表十字鏈表二、稀疏矩陣的壓縮存儲二、稀疏矩陣的壓縮存儲480 12 9 0 0 00 0 0 0 0 0-3 0 0 0 14 00 0 24 0 0 00 18 0 0 0 015 0 0 -7
38、 0 00 0 3 0 0 1512 0 0 0 18 0 9 0 0 24 0 00 0 0 0 0 -70 0 14 0 0 00 0 0 0 0 0(1, 2, 12)(1, 3, 9 )(3, 1, -3)(3, 5, 14)(4, 3, 24)(5, 2, 18)(6, 1, 15)(6, 4, -7)(1, 3, -3)(1, 6, 15)(2, 1, 12)(2, 5, 18)(3, 1, 9)(3, 4, 24)(4, 6, -7)(5, 3, 14)三三元元組組表表a.data三三元元組組表表b.data轉(zhuǎn)置后轉(zhuǎn)置后MT目的:目的:三、稀疏矩陣的轉(zhuǎn)置操作三、稀疏矩陣的轉(zhuǎn)置操作
39、49答:答:肯定不正確!肯定不正確!除了:除了: (1)每個元素的行下標(biāo)和列下標(biāo)互換(即三元組中每個元素的行下標(biāo)和列下標(biāo)互換(即三元組中的的i i和和j j互換互換););還應(yīng)該還應(yīng)該:(:(2)T T的總行數(shù)的總行數(shù)mumu和總列數(shù)和總列數(shù)nunu與與M M的不同的不同(互換);互換); (3)重排重排三元組內(nèi)元素順序三元組內(nèi)元素順序,使轉(zhuǎn)置后的三元組也,使轉(zhuǎn)置后的三元組也按行(或列)為主序有規(guī)律的排列。按行(或列)為主序有規(guī)律的排列。上述(上述(1 1)和()和(2 2)容易實現(xiàn),難點在)容易實現(xiàn),難點在(3 3)。 若采用三元組壓縮技術(shù)存儲稀疏矩陣,只要把每個若采用三元組壓縮技術(shù)存儲稀疏
40、矩陣,只要把每個元素的元素的行下標(biāo)和列下標(biāo)互換行下標(biāo)和列下標(biāo)互換,就完成了對該矩陣的轉(zhuǎn)置運,就完成了對該矩陣的轉(zhuǎn)置運算,這種說法正確嗎?算,這種說法正確嗎? 有兩種實現(xiàn)方法有兩種實現(xiàn)方法壓縮轉(zhuǎn)置壓縮轉(zhuǎn)置( (壓縮壓縮) )快速轉(zhuǎn)置快速轉(zhuǎn)置提問:提問:50算法算法 壓縮轉(zhuǎn)置壓縮轉(zhuǎn)置基本思想:基本思想:直接取,順序存直接取,順序存。即。即在在A的三元組順序的三元組順序表中表中依次依次找第找第0列、第列、第1列、列、直到最后一列的三元直到最后一列的三元組,并將找到的每個三元組的行、列交換后組,并將找到的每個三元組的行、列交換后順序順序存存儲到儲到B的三元組順序表中。的三元組順序表中。 三、稀疏矩陣的
41、轉(zhuǎn)置操作三、稀疏矩陣的轉(zhuǎn)置操作51方法方法1 1:壓縮轉(zhuǎn)置壓縮轉(zhuǎn)置思路:思路:反復(fù)掃描反復(fù)掃描a.data中的中的列序列序,從小到大依次進行轉(zhuǎn)置。,從小到大依次進行轉(zhuǎn)置。三三元元組組表表a.data三三元元組組表表b.data(1, 3, -3)(1, 6, 15)(2, 1, 12) (2, 5, 18)(3, 1, 9) (3, 4, 24) (4, 6, -7) (5, 3, 14)(1, 2, 12)(1, 3, 9 )(3, 1, -3)(3, 5, 14)(4, 3, 24)(5, 2, 18)(6, 1, 15)(6, 4, -7)11 22col q1234 p1234521.
42、 設(shè)置轉(zhuǎn)置后矩陣設(shè)置轉(zhuǎn)置后矩陣B的行數(shù)、列數(shù)和非零元個數(shù);的行數(shù)、列數(shù)和非零元個數(shù);2. 在在B中設(shè)置初始存儲位置中設(shè)置初始存儲位置pb;3. for (col=最小列號最小列號; col=最大列號最大列號; col+) 3.1 在在A中查找列號為中查找列號為col的三元組;的三元組; 3.2 交換其行號和列號,存入交換其行號和列號,存入B中中pb位置;位置; 3.3 pb+;算法算法 壓縮轉(zhuǎn)置壓縮轉(zhuǎn)置偽代碼偽代碼三、稀疏矩陣的轉(zhuǎn)置操作三、稀疏矩陣的轉(zhuǎn)置操作53Status TransPoseSMatrix ( TSMatrix M, TSMatrix &T)T.mu=M.nu; T.
43、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.datap.j=col) T.dataq.i=M.datap.j; T.dataq.j=M.datap.i; T.dataq.value=M.datap.value; q+; return OK; /TranposeSMatrix;壓縮轉(zhuǎn)置算法描述壓縮轉(zhuǎn)置算法描述:(見教材(見教材P99)/用三元組表存放稀疏矩陣用三元組表存放稀疏矩陣M M,求,求M的轉(zhuǎn)置矩陣的轉(zhuǎn)置矩陣T/q是轉(zhuǎn)置矩陣是轉(zhuǎn)置矩陣T T的結(jié)點編號的結(jié)點編
44、號/col是掃描是掃描M三元表列序的變量三元表列序的變量/p是是M三元表中結(jié)點編號三元表中結(jié)點編號541、主要時間消耗主要時間消耗在查找在查找M.datap.j=col的元素的元素,由兩重循環(huán),由兩重循環(huán)完成完成: : for(col=1; col=M.nu; col+) 循環(huán)次數(shù)循環(huán)次數(shù)nu for(p=1; p=M.tu; p+) 循環(huán)次數(shù)循環(huán)次數(shù)tu所以該算法的時間復(fù)雜度為所以該算法的時間復(fù)雜度為O(O(nu*tu) ) - -即即M的列數(shù)與的列數(shù)與M中非零元素的個數(shù)中非零元素的個數(shù)之積之積最惡劣情況:最惡劣情況:M M中全是非零元素,此時中全是非零元素,此時tu=mu*nu, 時間復(fù)雜
45、度為時間復(fù)雜度為 O(O(nu2*mu ) )注:注:若若M M中基本上是非零元素時,即使用非壓縮傳統(tǒng)轉(zhuǎn)置算法中基本上是非零元素時,即使用非壓縮傳統(tǒng)轉(zhuǎn)置算法的時間復(fù)雜度也不過是的時間復(fù)雜度也不過是O(O(nu*mu) ) (程序見(程序見教材教材P99P99)結(jié)論:結(jié)論:壓縮轉(zhuǎn)置算法不能濫用。壓縮轉(zhuǎn)置算法不能濫用。前提:前提:僅適用于非零元素個數(shù)很少(即僅適用于非零元素個數(shù)很少(即tumu*nu)的情況。)的情況。壓縮轉(zhuǎn)置算法的效率分析壓縮轉(zhuǎn)置算法的效率分析:55分析:分析:A中第中第0列的第一個非零元素一定存儲在列的第一個非零元素一定存儲在B中下中下標(biāo)為標(biāo)為0的位置上,該列中其它非零元素應(yīng)存
46、放在的位置上,該列中其它非零元素應(yīng)存放在B中中后面連續(xù)的位置上,那么第后面連續(xù)的位置上,那么第1列的第一個非零元素在列的第一個非零元素在B中的位置便等于第中的位置便等于第0列的第一個非零元素在列的第一個非零元素在B中的位中的位置加上第置加上第0列的非零元素的個數(shù),以此類推。列的非零元素的個數(shù),以此類推。 基本思想:基本思想:順序取,直接存。順序取,直接存。即即在在A中依次取三元中依次取三元組,交換其行號和列號放到組,交換其行號和列號放到B 中中適當(dāng)適當(dāng)位置。位置。算法算法 快速轉(zhuǎn)置快速轉(zhuǎn)置如何確定當(dāng)前從如何確定當(dāng)前從A中取出的三元組在中取出的三元組在B中的位置?中的位置?三、稀疏矩陣的轉(zhuǎn)置操作
47、三、稀疏矩陣的轉(zhuǎn)置操作56方法方法2 2 快速轉(zhuǎn)置快速轉(zhuǎn)置三三元元組組表表a.data三三元元組組表表b.data(1, 3, -3)(2 ,1,12)(2, 5, 18)(3, 1, 9)(4, 6, -7)(5, 3, 14)(1, 6, 15)(3, 4, 24)(1, 2, 12)(1, 3, 9 )(3, 1, -3)(3, 5, 14)(4, 3, 24)(5, 2, 18)(6, 1, 15)(6, 4, -7)思路:依次思路:依次把把a.data中的元素直接送入中的元素直接送入b.data的恰當(dāng)位置的恰當(dāng)位置上(上(即即M M三元組的三元組的p p指針不回溯指針不回溯)。)。關(guān)
48、鍵:關(guān)鍵:怎樣尋找怎樣尋找b.data的的“恰當(dāng)恰當(dāng)”位置?位置? p1234 q 3 557引入兩個數(shù)組作為輔助數(shù)據(jù)結(jié)構(gòu):引入兩個數(shù)組作為輔助數(shù)據(jù)結(jié)構(gòu):numnu:存儲矩陣存儲矩陣A中某列的非零元素的個數(shù);中某列的非零元素的個數(shù);cpotnu:初值表示矩陣初值表示矩陣A中某列的第一個非零元素中某列的第一個非零元素在在B中的位置。中的位置。 數(shù)據(jù)結(jié)構(gòu)設(shè)計:數(shù)據(jù)結(jié)構(gòu)設(shè)計:cpot0=0;cpotcol=cpotcol- -1+numcol- -1; 1colnunum與與cpot存在如下遞推關(guān)系:存在如下遞推關(guān)系:算法算法 快速轉(zhuǎn)置快速轉(zhuǎn)置三、稀疏矩陣的轉(zhuǎn)置操作三、稀疏矩陣的轉(zhuǎn)置操作58如果能如
49、果能預(yù)知預(yù)知M矩陣矩陣每一列每一列( (即即T的每一行的每一行) )的的非零元素個數(shù)非零元素個數(shù),又,又能預(yù)知能預(yù)知第一個非零元素第一個非零元素在在b.datab.data中的中的位置位置, ,則掃描則掃描a.data時便時便可以將每個元素準(zhǔn)確定位(可以將每個元素準(zhǔn)確定位(因為已知若干參考點因為已知若干參考點)。)。技巧:技巧:利用利用帶輔助向量帶輔助向量的三元組表,它正好攜帶每行(或列)的三元組表,它正好攜帶每行(或列)的非零元素個數(shù)的非零元素個數(shù) NUM(i)以及每行(或列)的第一個非以及每行(或列)的第一個非零元素在三元組表中的位置零元素在三元組表中的位置POS(i) 等信息。等信息。設(shè)
50、計思路:設(shè)計思路:i123456NUM(i)202112POS( i )133567不過我們需要的是不過我們需要的是按列生成的按列生成的M矩陣的輔助向量。矩陣的輔助向量。規(guī)律:規(guī)律:POS(1)1POS(i)POS(i-1)+NUM(i-1)請回憶:請回憶:請注意請注意a.data特征:每列首個非零元素必定先被掃描到。特征:每列首個非零元素必定先被掃描到。59令:令:M中的列變量用中的列變量用col表示;表示; num col :存放存放M中第中第col 列中非列中非0 0元素個數(shù),元素個數(shù), cpot col :存放存放M中第中第col列的第一個非列的第一個非0 0元素的位置,元素的位置,
51、(即即b.data中待計算的中待計算的“恰當(dāng)恰當(dāng)”位置所需參考點位置所需參考點)討論:討論:按列優(yōu)先的輔助向量求出后,按列優(yōu)先的輔助向量求出后,下一步該如何操作?下一步該如何操作?由由a.dataa.data中每個元素的列信息,即可直接查出中每個元素的列信息,即可直接查出b.datab.data中的中的重要參考點之位置,進而可確定當(dāng)前元素之位置!重要參考點之位置,進而可確定當(dāng)前元素之位置!col123456numcol222110cpotcol1規(guī)律:規(guī)律: cpot(1)1 cpotcol cpotcol-1 + numcol-10 12 9 0 0 00 0 0 0 0 0-3 0 0 0
52、 14 00 0 24 0 0 00 18 0 0 0 015 0 0 -7 0 0M 3 5 7 8 8col 1 2 3 4 5 6601. 設(shè)置轉(zhuǎn)置后矩陣設(shè)置轉(zhuǎn)置后矩陣B的行數(shù)、列數(shù)和非零元素的個數(shù);的行數(shù)、列數(shù)和非零元素的個數(shù);2. 計算計算A中每一列的非零元素個數(shù);中每一列的非零元素個數(shù);3. 計算計算A中每一列的第一個非零元素在中每一列的第一個非零元素在B中的下標(biāo);中的下標(biāo);4. 依次取依次取A中的每一個非零元素對應(yīng)的三元組;中的每一個非零元素對應(yīng)的三元組; 4.1 確定該元素在確定該元素在B中的下標(biāo)中的下標(biāo)pb; 4.2 將該元素的行號列號交換后存入將該元素的行號列號交換后存入B
53、中中pb的位置;的位置; 4.3 預(yù)置該元素所在列的下一個元素的存放位置;預(yù)置該元素所在列的下一個元素的存放位置;算法算法 快速轉(zhuǎn)置快速轉(zhuǎn)置偽代碼偽代碼三、稀疏矩陣的轉(zhuǎn)置操作三、稀疏矩陣的轉(zhuǎn)置操作61Status FastTransposeSMatrix(TSMatirx M, TSMatirx &T) T.mu = M.nu ;T .nu = M.mu ; T.tu = M.tu ; if ( T.tu ) for(col = 1; col =M.nu; col+) numcol =0; for( i = 1; i =M.tu; i +) col =M.data i .j ; +nu
54、m col ; cpos 1 =1; for(col = 2; col =M.nu; col+) cposcol =cposcol-1+num col-1 ; for( p =1; p =M.tu ; p + ) col =M.data p . j ; q =cpos col ; T.dataq.i = M.datap. j; T.dataq.j = M.datap. i; T.dataq. value = M.datap. value; /for /ifreturn OK; /FastTranposeSMatrix;快速轉(zhuǎn)置算法描述快速轉(zhuǎn)置算法描述:/M用順序存儲表示,求用順序存儲表示,求M
55、的轉(zhuǎn)置矩陣的轉(zhuǎn)置矩陣T/初始化初始化M中各列元素個數(shù)為中各列元素個數(shù)為0/再生成每列首元位置輔助向量表再生成每列首元位置輔助向量表/p指向指向a.data,循環(huán)次數(shù)為非,循環(huán)次數(shù)為非0元素總個數(shù)元素總個數(shù)tu/查輔助向量表得查輔助向量表得q,即,即T中位置中位置/重要語句!重要語句!修改向量表中列坐標(biāo)值,供修改向量表中列坐標(biāo)值,供同同一列一列下一非零元素定位之用!下一非零元素定位之用!621. 與常規(guī)算法相比,附加了生成輔助向量表的工作。增開了與常規(guī)算法相比,附加了生成輔助向量表的工作。增開了2個長度為列長的數(shù)組個長度為列長的數(shù)組( (num 和和cpos )。 傳統(tǒng)轉(zhuǎn)置:傳統(tǒng)轉(zhuǎn)置:O( mu
56、*nu) 壓縮轉(zhuǎn)置:壓縮轉(zhuǎn)置:O ( mu*tu) 壓縮快速轉(zhuǎn)置:壓縮快速轉(zhuǎn)置:O( nu+tu)犧牲空間效率換時間效率犧牲空間效率換時間效率??焖俎D(zhuǎn)置算法的效率分析快速轉(zhuǎn)置算法的效率分析:2. 從時間上,此算法用了從時間上,此算法用了4個并列的單循環(huán)個并列的單循環(huán),而且其中前,而且其中前3個單個單循環(huán)都是用來產(chǎn)生輔助向量表的。循環(huán)都是用來產(chǎn)生輔助向量表的。 for(col = 1; col =M.nu; col+) 循環(huán)次數(shù)循環(huán)次數(shù)nu;nu; for( i = 1; i =M.tu; i +) 循環(huán)次數(shù)循環(huán)次數(shù)tu;tu; for(col = 2; col =M.nu; col+) 循環(huán)次
57、數(shù)循環(huán)次數(shù)nu;nu; for( p =1; p =M.tu ; p + ) 循環(huán)次數(shù)循環(huán)次數(shù)tu;tu; 該算法的時間復(fù)雜度該算法的時間復(fù)雜度(nu*2)+(tu*2)=O (nu+tu)討論:討論:最惡劣情況是最惡劣情況是tu=nu*mu( (即矩陣中全部是非零元素),即矩陣中全部是非零元素),而此時的時間復(fù)雜度也只是而此時的時間復(fù)雜度也只是O(mu*nu),并未超過傳統(tǒng)轉(zhuǎn)置算法,并未超過傳統(tǒng)轉(zhuǎn)置算法的時間復(fù)雜度。的時間復(fù)雜度。小結(jié):小結(jié):稀疏矩陣相乘的算法見教材稀疏矩陣相乘的算法見教材P101-103635.4 廣義表的定義廣義表的定義廣義表是線性表的推廣,也稱為列表(廣義表是線性表的推廣,也稱為列表(lists)記為:記為: LS = ( a1 , a2 , , an ) 廣義表名廣義表名1. 定義:定義: 第一個元素是表頭,而其余元素第一個元素是表頭,而其余元素組成的表組成的表稱為表尾;稱為表尾; 用用小寫小寫字母表示字母表示原子類型原子類型,用,用大寫大寫字母表示字母表示列表列表。n是表長是表長在廣義表中約定:在廣義表中約定:討論:討論:廣義表與線性表的區(qū)別和聯(lián)系?廣義表與線性表的區(qū)別和聯(lián)系? 廣義表中元素廣義表中元素既可以既可以是原子類型,是原子類型,也可以也可以是列表;是列表;當(dāng)每個元素都為原子且類型相同時,就是線性表。當(dāng)每個元素都為原子
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZSA 277-2024 高速落絲上筒機器人
- 二零二五年度跨境電商股份轉(zhuǎn)讓及供應(yīng)鏈整合協(xié)議
- 2025年度智能公寓退房協(xié)議書
- 二零二五年度白酒品牌區(qū)域總代理合作協(xié)議
- 二零二五年度醫(yī)院及學(xué)?;S池專業(yè)清理服務(wù)合同
- 二零二五年度企業(yè)財務(wù)報表審計委托代理服務(wù)合同
- 2025年度車間租賃安全管理制度與執(zhí)行協(xié)議
- 二零二五年度無房產(chǎn)證房屋買賣雙方責(zé)任劃分協(xié)議
- 二零二五年度勞動合同法企業(yè)人力資源管理制度合同
- 二零二五年度知識產(chǎn)權(quán)侵權(quán)糾紛調(diào)解協(xié)議范本匯編
- 產(chǎn)教融合大學(xué)科技園建設(shè)項目實施方案
- 交通法律與交通事故處理培訓(xùn)課程與法律解析
- 廣西版四年級下冊美術(shù)教案
- 《換熱器及換熱原理》課件
- 兒童權(quán)利公約演示文稿課件
- UPVC排水管技術(shù)標(biāo)準(zhǔn)
- MSA-測量系統(tǒng)分析模板
- 血透室公休座談水腫的護理
- 急診預(yù)檢分診專家共識課件
- 廣州市海珠區(qū)事業(yè)單位考試歷年真題
- 2023年山西省太原市迎澤區(qū)校園招考聘用教師筆試題庫含答案詳解
評論
0/150
提交評論