數(shù)據(jù)結構第5章數(shù)組B_第1頁
數(shù)據(jù)結構第5章數(shù)組B_第2頁
數(shù)據(jù)結構第5章數(shù)組B_第3頁
數(shù)據(jù)結構第5章數(shù)組B_第4頁
數(shù)據(jù)結構第5章數(shù)組B_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1數(shù)據(jù)結構課程的內容數(shù)據(jù)結構課程的內容2第第5章章 數(shù)組和廣義表(數(shù)組和廣義表(Arrays & Lists)5.1 數(shù)組的定義數(shù)組的定義5.2 數(shù)組的順序表示和實現(xiàn)數(shù)組的順序表示和實現(xiàn)5.3 矩陣的壓縮存儲矩陣的壓縮存儲5.4 廣義表的定義廣義表的定義5.5 廣義表的存儲結構廣義表的存儲結構 元素的值并非原子類型,元素的值并非原子類型,可以再分解可以再分解,表中元素也是一個,表中元素也是一個線性表(即廣義的線性表)。線性表(即廣義的線性表)。 所有數(shù)據(jù)元素仍屬所有數(shù)據(jù)元素仍屬同一數(shù)據(jù)類型同一數(shù)據(jù)類型。數(shù)組和廣義表的特點:數(shù)組和廣義表的特點:一種特殊的線性表一種特殊的線性表3順序存儲方

2、式:順序存儲方式:按低地址優(yōu)先(或高地址優(yōu)先)順序存入一維按低地址優(yōu)先(或高地址優(yōu)先)順序存入一維數(shù)組。數(shù)組。(難點是:多維數(shù)組與一維數(shù)組的地址映射關系難點是:多維數(shù)組與一維數(shù)組的地址映射關系)例例1:已知二維數(shù)組已知二維數(shù)組Am,m按按行行存儲的元素地址公式是:存儲的元素地址公式是: Loc(aij)= Loc(a11)+(i-1)*m+(j-1)*K , 請問按請問按列列存儲的公式相同嗎?存儲的公式相同嗎? 答:答:盡管是方陣,但公式仍不同,要作修改:盡管是方陣,但公式仍不同,要作修改: Loc(aij)=Loc(a11)+(j-1)*m+(i-1)*K例例2:00年計算機系考研題年計算機

3、系考研題設數(shù)組設數(shù)組a160, 170的基地的基地址為址為2048,每個元素占,每個元素占2個存儲單元,若以列序為主序順序存?zhèn)€存儲單元,若以列序為主序順序存儲,則元素儲,則元素a32,58的存儲地址為的存儲地址為 。根據(jù)列優(yōu)先公式根據(jù)列優(yōu)先公式 Loc(aij)=Loc(a11)+(j-1)*m+(i-1)*K得:得:LOC(a32,58)=2048+(58-1)*60+(32-1)*28950答:答:請注意審題!請注意審題!想一想:若數(shù)組是想一想:若數(shù)組是a059, 069,結果是否仍為結果是否仍為8950?4例例3:【專科考研資格考試??瓶佳匈Y格考試】假設有假設有三維三維數(shù)組數(shù)組A798,

4、每個,每個元素用相鄰的元素用相鄰的6個字節(jié)存儲,存儲器按字節(jié)編址。已知個字節(jié)存儲,存儲器按字節(jié)編址。已知A的起的起始存儲位置(基地址)為始存儲位置(基地址)為1000,末尾元素,末尾元素A687的第一個的第一個字節(jié)地址為多少?若按字節(jié)地址為多少?若按高地址優(yōu)先高地址優(yōu)先存儲時,元素存儲時,元素A476的的第一個字節(jié)地址為多少?第一個字節(jié)地址為多少? 答:答: 末尾元素末尾元素A687的第的第1個字節(jié)地址個字節(jié)地址 1000 +(798)66=4018 按按高地址優(yōu)先高地址優(yōu)先存儲時,元素存儲時,元素A476的第的第1個字節(jié)地址個字節(jié)地址提示:提示:將第將第3維看作維看作“頁碼頁碼”,前面兩維就

5、是每頁上的二維數(shù)組,前面兩維就是每頁上的二維數(shù)組。(高維地址計算通式參見清華殷人昆教材的解釋高維地址計算通式參見清華殷人昆教材的解釋)35865行指針向量行指針向量a11a12a1nam1am2amn補充:數(shù)組的鏈式存儲方式補充:數(shù)組的鏈式存儲方式用用帶行指針向量的單鏈表帶行指針向量的單鏈表來表示。來表示。注:注:鏈式數(shù)組的運算請參見鏈式數(shù)組的運算請參見“稀疏矩陣的轉置稀疏矩陣的轉置”注意:注意: 本章所討論的數(shù)組與高級語言中的數(shù)組有所區(qū)別:本章所討論的數(shù)組與高級語言中的數(shù)組有所區(qū)別:高級語言中的數(shù)組是順序結構;而本章的數(shù)組既可以是順序高級語言中的數(shù)組是順序結構;而本章的數(shù)組既可以是順序的,也

6、可以是的,也可以是鏈式結構鏈式結構,用戶可根據(jù)需要選擇。,用戶可根據(jù)需要選擇。65.3 5.3 矩陣的壓縮存儲討論:討論:1. 什么是壓縮存儲?什么是壓縮存儲?若多個數(shù)據(jù)元素的若多個數(shù)據(jù)元素的值都相同值都相同,則只分配一個元素值的存儲空間,則只分配一個元素值的存儲空間,且零元素不占存儲空間。且零元素不占存儲空間。2. 所有二維數(shù)組(矩陣)都能壓縮嗎?所有二維數(shù)組(矩陣)都能壓縮嗎?未必,要看矩陣是否具備以上壓縮條件。未必,要看矩陣是否具備以上壓縮條件。3. 什么樣的矩陣具備以上壓縮條件?什么樣的矩陣具備以上壓縮條件? 一些特殊矩陣,如:對稱矩陣,對角矩陣,三角矩陣,稀疏矩一些特殊矩陣,如:對稱

7、矩陣,對角矩陣,三角矩陣,稀疏矩陣等。陣等。4. 什么叫什么叫稀疏矩陣?稀疏矩陣?矩陣中非零元素的個數(shù)較少(一般小于矩陣中非零元素的個數(shù)較少(一般小于5%5%)重點介紹稀疏矩陣的壓縮和相應的操作。重點介紹稀疏矩陣的壓縮和相應的操作。7一、一、稀疏矩陣的壓縮存儲稀疏矩陣的壓縮存儲問題:問題:如果只存儲如果只存儲稀疏矩陣中的非零元素,那這些元素的稀疏矩陣中的非零元素,那這些元素的位置信息位置信息該如何表示?該如何表示?解決思路:解決思路:對每個非零元素對每個非零元素增開增開若干存儲單元,用來存放其所若干存儲單元,用來存放其所在的在的行號行號和和列號列號,便可準確反映該元素所在位置。,便可準確反映該

8、元素所在位置。實現(xiàn)方法:實現(xiàn)方法:將每個非零元素用一個三元組將每個非零元素用一個三元組(i,j,aij)來表示,)來表示,則每個則每個稀疏矩陣可用一個稀疏矩陣可用一個三元組表三元組表來表示。來表示。二、二、稀疏矩陣的操作稀疏矩陣的操作8例例1 : 三元素組表中的每個結點對應于稀疏矩陣的三元素組表中的每個結點對應于稀疏矩陣的一個非零元素,它包含有三個數(shù)據(jù)項,分別表示該一個非零元素,它包含有三個數(shù)據(jù)項,分別表示該元素的元素的 、 和和 。 行下標行下標列下標列下標元素值元素值例例2 2:寫出右圖所示稀疏矩陣寫出右圖所示稀疏矩陣的壓縮存儲形式。的壓縮存儲形式。0 12 9 0 0 00 0 0 0

9、0 0 -3 0 0 0 14 00 0 24 0 0 00 18 0 0 0 015 0 0 -7 0 0解:解:至少有至少有4 4種存儲形式。種存儲形式。法法1 1:用線性表表示:用線性表表示:0 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 0 09法法2 2:用三元組矩陣表示:用三元組矩陣表示:0 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 0 0121213931-335144324521861156

10、4-7注意:注意:為更可靠描述,為更可靠描述,通常再加一行通常再加一行“總體總體”信息:即信息:即總行數(shù)、總總行數(shù)、總列數(shù)、非零元素總個列數(shù)、非零元素總個數(shù)數(shù)668ijvalue稀疏矩陣壓縮存儲的稀疏矩陣壓縮存儲的缺點缺點:將失去隨機將失去隨機存取功能存取功能 !10法三:法三:用用帶輔助向量帶輔助向量的三元組表示。的三元組表示。 方法:方法: 增加增加2個輔助向量:個輔助向量: 記錄每行非記錄每行非0元素個數(shù),用元素個數(shù),用NUM(i)表示;表示; 記錄稀疏矩陣中每行第一個非記錄稀疏矩陣中每行第一個非0元素在元素在三三元組中的元組中的行號行號,用,用POS(i)表示。表示。765312112

11、02NUM( i)6543POS( i )21i0 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 0 0-7461516182524341453-3139311221866vji0123456783用途:用途:便于便于高效訪問高效訪問稀疏矩陣中稀疏矩陣中任一非任一非零元素零元素。POS(POS(i i) )如何計算?如何計算?POS(1)1POS(i)POS(i-1)+NUM(i-1)11法四:法四:用用十字鏈表十字鏈表表示表示用途:用途:方便稀疏矩陣的方便稀疏矩陣的加減加減運算運算方法:方法:每個非每

12、個非0元素占用元素占用5個域個域right downvji同一同一列列中下一非中下一非零元素的指針零元素的指針同一同一行行中下一非中下一非零元素的指針零元素的指針十字鏈表的特點:十字鏈表的特點:每行非零元素鏈接每行非零元素鏈接成帶表頭結點的循環(huán)鏈表;成帶表頭結點的循環(huán)鏈表;每列非零元素也鏈接每列非零元素也鏈接成帶表頭結點的循環(huán)鏈表。成帶表頭結點的循環(huán)鏈表。則每個非零元素既是行循環(huán)鏈表中的一個結點;又是列循環(huán)則每個非零元素既是行循環(huán)鏈表中的一個結點;又是列循環(huán)鏈表中的一個結點,即鏈表中的一個結點,即呈十字鏈狀。呈十字鏈狀。122100H1931182512typedef structtypede

13、f struct TripleTriple datadataMAXSIZE+1; MAXSIZE+1; /三元組表,以行為主序存入一三元組表,以行為主序存入一維向量維向量 data data 中中 int int mumu; ; /矩陣總行數(shù)矩陣總行數(shù) int int nunu; ; /矩陣總列數(shù)矩陣總列數(shù) int tu; int tu; /矩陣中非零元素總個數(shù)矩陣中非零元素總個數(shù) TsMatrixTsMatrix; ; 三元組表的順序存儲表示三元組表的順序存儲表示(見教材(見教材P98P98)對三元組表對三元組表的整體定義的整體定義 #define MAXSIZE 125000 #defin

14、e MAXSIZE 125000 /設非零元素最大個數(shù)設非零元素最大個數(shù)125000125000 typedef struct typedef struct int i; int i; /元素行號元素行號 int j; int j; /元素列號元素列號 ElemType e; ElemType e; /元素值元素值 TripleTriple; ; 對表中每對表中每個結點的結構定義個結點的結構定義13二、二、稀疏矩陣的操作稀疏矩陣的操作 0 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 0 00 0 3 0

15、 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轉置后轉置后MT(以轉置運算為例)(以轉置運算為例)目的:目的:14答:答:肯定不正確!肯定不

16、正確!除了:除了: (1 1)每個元素的行下標和列下標互換(即三元組)每個元素的行下標和列下標互換(即三元組中的中的i i和和j j互換互換););還需要:還需要:(2 2) T T的總行數(shù)的總行數(shù)mumu和總列數(shù)和總列數(shù)nunu也要也要互換;互換; (3 3)重排重排三元組內各元素順序三元組內各元素順序,使轉置后的三元,使轉置后的三元組也按行(或列)為主序有規(guī)律的排列。組也按行(或列)為主序有規(guī)律的排列。上述(上述(1 1)和()和(2 2)容易實現(xiàn),難點在)容易實現(xiàn),難點在(3 3)。 若采用三元組壓縮技術存儲稀疏矩陣,只要把每個若采用三元組壓縮技術存儲稀疏矩陣,只要把每個元素的元素的行下

17、標和列下標互換行下標和列下標互換,就完成了對該矩陣的轉置運,就完成了對該矩陣的轉置運算,這種說法正確嗎?算,這種說法正確嗎? 有兩種實現(xiàn)有兩種實現(xiàn)轉置的方法轉置的方法壓縮轉置壓縮轉置快速快速( (壓縮壓縮) )轉置轉置提問:提問:15方法方法1 1:壓縮轉置壓縮轉置思路:思路:反復掃描反復掃描a a表表(記為(記為a.dataa.data)中的中的列序列序,從從j=1j=1n 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

18、, -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)11col q1234討論:每個元素的列分量怎樣書寫?討論:每個元素的列分量怎樣書寫?a.datap.j p123416Status TransPoseSMatrix(TSMatrix M, 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;

19、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;壓縮轉置算法描述壓縮轉置算法描述:(見教材(見教材P99)/用三元組表存放稀疏矩陣用三元組表存放稀疏矩陣M M,求,求M M的轉置矩陣的轉置矩陣T T/q q是轉置矩陣是轉置矩陣T T的結點編號的結點編號/colcol是掃描是掃描M M三元表列序的變量三元表列序的變量/p是是M M三元表中結點編號三元表中結點編號17三三元元組組表表a.data三

20、三元元組組表表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)(6, 4, -7)(6, 1, 15)(5, 2, 18)(4, 3, 24)(3, 5, 14)(3, 1, -3)(1, 3, 9 )(1, 2, 12)11col q1234 p12341 1、主要時間消耗在主要時間消耗在查找查找M.datap.j=colM.datap.j=col的元素的元素,由兩重循,由兩重循環(huán)完成環(huán)完成: : for(col=1; col=M.nu; col+) 循環(huán)次數(shù)列長

21、度循環(huán)次數(shù)列長度nu for(p=1; p=M.tu; p+) 循環(huán)次數(shù)非零元素個數(shù)循環(huán)次數(shù)非零元素個數(shù)tu壓縮轉置算法的效率分析壓縮轉置算法的效率分析:所以該算法的時間復雜度為所以該算法的時間復雜度為O(O(nunu* *tutu) ) - -即即M M的列數(shù)與的列數(shù)與M M中非零元素的個數(shù)之中非零元素的個數(shù)之積積最惡劣情況:最惡劣情況:M M中全是非零元素,此時非零元素總數(shù)中全是非零元素,此時非零元素總數(shù)tu=mutu=mu* *nunu, 時間復雜度為時間復雜度為 O(O(nunu2 2* *mumu ) )注:注:若若M M中基本上是非零元素時,即使用傳統(tǒng)轉置算法的時間復中基本上是非零

22、元素時,即使用傳統(tǒng)轉置算法的時間復雜度也不過是雜度也不過是O(O(nunu* *mumu) ) (程序見教材(程序見教材P99P99)結論:結論:壓縮轉置算法不能濫用。壓縮轉置算法不能濫用。前提:前提:僅適用于非零元素個數(shù)很少(即僅適用于非零元素個數(shù)很少(即tutumumu* *nunu)的情況。)的情況。18方法方法2 2 快速轉置快速轉置三三元元組組表表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 )(

23、3, 1, -3)(3, 5, 14)(4, 3, 24)(5, 2, 18)(6, 1, 15)(6, 4, -7)思路:思路:依次依次把把a.dataa.data中的元素直接送入中的元素直接送入b.datab.data的恰當位的恰當位置上(置上(即即M M三元組的三元組的p p指針不回溯指針不回溯)。)。關鍵:關鍵:怎樣尋找怎樣尋找b.datab.data的的“恰當恰當”位置?位置? p1234 q 3 519如果能如果能預知預知M矩陣矩陣每一列每一列( (即即T的每一行的每一行) )的的非零元素個數(shù)非零元素個數(shù),又能預知又能預知第一個非零元素第一個非零元素在在b.datab.data中的

24、中的位置位置, ,則掃描則掃描a.data時便可以將每個元素準確定位(時便可以將每個元素準確定位(因為已知若干參考點因為已知若干參考點)。)。技巧:先生成技巧:先生成三元組表的三元組表的兩個輔助向量兩個輔助向量,讓它攜帶每行(或,讓它攜帶每行(或列)的非零元素個數(shù)列)的非零元素個數(shù) NUM(i)以及每行(或列)的第一以及每行(或列)的第一個非零元素在三元組表中的位置個非零元素在三元組表中的位置POS(i) 等信息。等信息。設計思路:設計思路:i123456NUM(i)202112POS( i )133567注:為實現(xiàn)轉置運算,應當注:為實現(xiàn)轉置運算,應當按列按列生成生成 M 矩陣的輔助向量矩陣

25、的輔助向量計算式計算式:POS(1)1POS(i)POS(i-1)+NUM(i-1)輔助向量的樣式:輔助向量的樣式:請注意請注意a.dataa.data特征:每列首個非零元素必定先被掃描到。特征:每列首個非零元素必定先被掃描到。20令:令:M矩陣中的矩陣中的列列變量用變量用col表示;表示; num col :存放存放M中第中第col 列中非列中非0 0元素個數(shù)元素個數(shù) cpot col :存放存放M中第中第col列的第一個非列的第一個非0 0元素的位置元素的位置 (即(即b.datab.data中待計算的中待計算的“恰當恰當”位置所需參考點)位置所需參考點)討論:討論:求出求出按列優(yōu)先按列優(yōu)

26、先的的輔助向量輔助向量后,后,如何如何實現(xiàn)快速轉置?實現(xiàn)快速轉置?col123456numcol222110cpotcol1計算式:計算式: cpot(1)1cpotcol cpotcol-1 + numcol-1 3 5 7 8 90 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 0 0Mcol 1 2 3 4 5 6由由a a.data.data中每個元素的列信息,可以直接中每個元素的列信息,可以直接從輔助向量從輔助向量cpotcol中查出在中查出在b b.data.data中的中的“基準基準”位置,

27、進而得到當前元素之位置。位置,進而得到當前元素之位置。三三元元組組表表a.data(6, 4, -7)(6, 1, 15)(5, 2, 18)(4, 3, 24)(3, 5, 14)(3, 1, -3)(1, 3, 9 )(1, 2, 12)col p1234想一想:是從原始矩陣想一想:是從原始矩陣M M中統(tǒng)計中統(tǒng)計numcol方便些,方便些,還是從對應的三元組表還是從對應的三元組表a.dataa.data中統(tǒng)計更方便?中統(tǒng)計更方便?21Status FastTransposeSMatrix(TSMatirx M, TSMatirx &T) T.mu = M.nu ;T .nu = M

28、.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.datai .j ; +num 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 ; =cpos col ; T.dataq.i = M.datap. j; T.dataq.j = M.dat

29、ap. i; T.dataq. value = M.datap. value; /for /ifreturn OK; /FastTranposeSMatrix;快速轉置算法描述快速轉置算法描述:/M/M是順序存儲的三元組表,求是順序存儲的三元組表,求M M的轉置矩陣的轉置矩陣T T/先統(tǒng)計每列非零元素個數(shù)先統(tǒng)計每列非零元素個數(shù)/再生成每列首元位置輔助向量再生成每列首元位置輔助向量/p/p指向指向a.dataa.data,循環(huán)次數(shù)為非,循環(huán)次數(shù)為非0 0元素總個數(shù)元素總個數(shù)tutu/查輔助向量得查輔助向量得 ,即,即T T中位置中位置前前3 3個個forfor循環(huán)循環(huán)用來產生兩個用來產生兩個輔助

30、向量輔助向量重要!修改向量內容(列坐標加重要!修改向量內容(列坐標加1 1),),預備給預備給同列同列的下一非零元素定位之用的下一非零元素定位之用元素轉置元素轉置221.1. 與常規(guī)算法相比,附加了與常規(guī)算法相比,附加了生成輔助向量表生成輔助向量表的工作。增開了的工作。增開了2 2個長度為列長的數(shù)組個長度為列長的數(shù)組( (num 和和cpos )。傳統(tǒng)轉置:傳統(tǒng)轉置:O(O(mumu* *nunu) ) 壓縮轉置:壓縮轉置:O(O(mumu* *tutu) ) 壓縮快速轉置:壓縮快速轉置:O(O(nu+nu+tutu) )快速轉置算法的效率分析快速轉置算法的效率分析:2.2. 從時間上,此算法

31、用了從時間上,此算法用了4 4個并列的單循環(huán),而且其中前個并列的單循環(huán),而且其中前3 3個個單循環(huán)都是用來產生輔助向量表的。單循環(huá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)次數(shù)循環(huán)次數(shù)nu;nu; for( p =1; p =M.tu ; p + ) ; 循環(huán)次數(shù)循環(huán)次數(shù)tu;tu; 該算法的時間復雜度該算法的時間復雜度nu+tu+nu+tu=O(nu+tu+nu

32、+tu=O(nu+tunu+tu)討論:討論:最惡劣情況是矩陣中全為非零元素,此時最惡劣情況是矩陣中全為非零元素,此時tu=nutu=nu* *mumu而此時的時間復雜度也只是而此時的時間復雜度也只是O(O(mumu* *nunu) ),并未超過傳統(tǒng)轉置算,并未超過傳統(tǒng)轉置算法的時間復雜度。法的時間復雜度。小結:小結:稀疏矩陣相乘的算法略,稀疏矩陣相乘的算法略,見教材見教材P101-103P101-103增設輔助向量,犧牲空間增設輔助向量,犧牲空間效率換取時間效率。效率換取時間效率。235.4 5.4 廣義表的定義廣義表的定義廣義表是線性表的推廣,也稱為列表(廣義表是線性表的推廣,也稱為列表(

33、lists)記為:記為: LS = ( a1 , a2 , , an ) 廣義表名廣義表名 表頭表頭(Head) 表尾表尾 (Tail)1、定義:、定義: 第一個第一個元素是表頭元素是表頭,而其余元素組成的,而其余元素組成的表稱為表尾表稱為表尾; 用小寫字母表示原子類型,用用小寫字母表示原子類型,用大寫字母大寫字母表示列表。表示列表。n n是表長是表長在廣義表中約定:在廣義表中約定:討論:討論:廣義表與線性表的區(qū)別和聯(lián)系?廣義表與線性表的區(qū)別和聯(lián)系? 廣義表中元素既可以是原子類型,也可以是列表;廣義表中元素既可以是原子類型,也可以是列表;當每個元素都為原子且類型相同時,就是線性表。當每個元素都

34、為原子且類型相同時,就是線性表。242、特點:、特點: 有次序性有次序性 有長度有長度 有深度有深度 可遞歸可遞歸 可共享可共享一個直接前驅和一個直接后繼一個直接前驅和一個直接后繼表中元素個數(shù)表中元素個數(shù)表中括號的重數(shù)表中括號的重數(shù)自己可以作為自己的子表自己可以作為自己的子表可以為其他廣義表所共享可以為其他廣義表所共享特別提示:特別提示:任何一個非空表,表頭可能是原子,也可能任何一個非空表,表頭可能是原子,也可能是列表;但是列表;但表尾一定是列表表尾一定是列表。25E=(a,E)=(a,(a,E)= (a,(a,(a,.),E為為遞歸表遞歸表1)A =( )2)B = ( e ) 3)C =(

35、 a ,( b , c , d ) ) 4)D=( A , B ,C )5)E=(a, E)例例1:求下列廣義表的長度。求下列廣義表的長度。n=0,因為因為A A是空表是空表n=1,表中元素表中元素e e是原子是原子n=2,a a 為原子,為原子,(b,c,d)(b,c,d)為子表為子表n=3,3 3個元素都是子表個元素都是子表n=2,a a 為原子,為原子,E E為子表為子表D=(A,B,C)=( ),(e),(a,(b,c,d),共享表共享表26ABDCeabcd A=( a , (b, A) )例例2 2:試用圖形表示下列廣義表試用圖形表示下列廣義表. .(設(設 代表子表,代表子表, 代表元素)代表元素) e D=(A,B,C)=( ( ),(e),( a, (b,c,d) ) )Aab的長度為的長度為3,深度為,深度為3的長度為的長度為2,深度為,深度為深度括號的重數(shù)深度括

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論