《數(shù)據(jù)結(jié)構(gòu)》基本概念_第1頁
《數(shù)據(jù)結(jié)構(gòu)》基本概念_第2頁
《數(shù)據(jù)結(jié)構(gòu)》基本概念_第3頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基本概念數(shù)據(jù)數(shù)據(jù)是信息的載體,在計(jì)算機(jī)科學(xué)中是指所有能輸入到計(jì)算機(jī)中并能被計(jì)算機(jī)程序識別和處理的符號集合。數(shù)據(jù)元素?cái)?shù)據(jù)元素也稱為結(jié)點(diǎn),是表示數(shù)據(jù)的基本單位,在計(jì)算機(jī)程序中通常作為一個(gè)整體進(jìn)行考慮和處理。數(shù)據(jù)項(xiàng)數(shù)據(jù)項(xiàng)是構(gòu)成數(shù)據(jù)元素的不可分割的最小單位。數(shù)據(jù)對象數(shù)據(jù)對象是具有相同性質(zhì)的數(shù)據(jù)元素的集合,是數(shù)據(jù)的子集。注意:在不產(chǎn)生混淆的情況下,將數(shù)據(jù)對象簡稱為數(shù)據(jù)。數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一定關(guān)系的數(shù)據(jù)元素的集合,即數(shù)據(jù)結(jié)構(gòu)是一個(gè)二元組DataStructure = (D,R),其中D是數(shù)據(jù)元素的集合,R是D上關(guān)系的集合。按照視點(diǎn)的不同,數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)和存儲(chǔ)結(jié) 構(gòu)。數(shù)據(jù)的邏輯結(jié)構(gòu)數(shù)據(jù)的

2、邏輯結(jié)構(gòu)是指數(shù)據(jù)元素之間邏輯關(guān)系的整體。根據(jù)數(shù)據(jù)元素之間邏輯關(guān)系的不同,數(shù)據(jù)結(jié)構(gòu)分 為四類: 集合:數(shù)據(jù)元素之間就是“屬于同一個(gè)集合”,除此之外,沒有任何關(guān)系; 線性結(jié)構(gòu):數(shù)據(jù)元素之間存在著一對一的線性關(guān)系; 樹結(jié)構(gòu):數(shù)據(jù)元素之間存在著一對多的層次關(guān)系; 圖結(jié)構(gòu):數(shù)據(jù)元素之間存在著多對多的任意關(guān)系。注意:數(shù)據(jù)結(jié)構(gòu)分為兩類:線性結(jié)構(gòu)和非線性結(jié)構(gòu)。數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)又稱為物理結(jié)構(gòu),是數(shù)據(jù)及其邏輯結(jié)構(gòu)在計(jì)算機(jī)中的表示。通常有兩種存儲(chǔ)結(jié)構(gòu):順 序存儲(chǔ)結(jié)構(gòu)和鏈接存儲(chǔ)結(jié)構(gòu)。順序存儲(chǔ)結(jié)構(gòu)的基本思想是:用一組連續(xù)的存儲(chǔ)單元 依次存儲(chǔ)數(shù)據(jù)元素,數(shù)據(jù)元素之間的邏輯關(guān)系是由元素的存儲(chǔ)位置來表示的。鏈接存儲(chǔ)

3、結(jié)構(gòu)的基本思想是:用一組任意的存儲(chǔ)單元存儲(chǔ)數(shù)據(jù)元素,數(shù)據(jù)元素之間的邏輯關(guān)系是用指針來表示的。注意:存儲(chǔ)結(jié)構(gòu)除了存儲(chǔ)數(shù)據(jù)元素之外,必須存儲(chǔ)數(shù)據(jù)元素之間的邏輯關(guān)系。抽象數(shù)據(jù)類型抽象數(shù)據(jù)類型是一個(gè)數(shù)據(jù)結(jié)構(gòu)以及定義在該結(jié)構(gòu)上的一組操作的總稱。抽象數(shù)據(jù)類型提供了使用和實(shí) 現(xiàn)兩個(gè)不同的視圖,實(shí)現(xiàn)了封裝和信息隱藏。算法的定義通俗地講,算法是解決問題的方法,嚴(yán)格地說,算法是對特定問題求解步驟的一種描述,是指令的有 限序列。算法的特性 輸入:一個(gè)算法有零個(gè)或多個(gè)輸入(即算法可以沒有輸入),這些輸入通常取自于某個(gè)特定的對象 集合。 輸出:一個(gè)算法有一個(gè)或多個(gè)輸出(即算法必須要有輸出),通常輸出與輸入之間有著某種特

4、定的 關(guān)系。有窮性:一個(gè)算法必須總是(對任何合法的輸入)在執(zhí)行有窮步之后結(jié)束,且每一步都在有窮時(shí)間 內(nèi)完成。 確定性:算法中的每一條指令必須有確切的含義,不存在二義性。并且,在任何條件下,對于相同 的輸入只能得到相同的輸出。 可行性:算法描述的操作可以通過已經(jīng)實(shí)現(xiàn)的基本操作執(zhí)行有限次來實(shí)現(xiàn)。線性表的定義線性表簡稱表,是零個(gè)或多個(gè)具有相同類型的數(shù)據(jù)元素的有限序列。數(shù)據(jù)元素的個(gè)數(shù)稱為線性表的長度,長度等于零時(shí)稱為空表。線性表的邏輯關(guān)系在一個(gè)非空表L = (ai, a2, , an)中,任意一對相鄰的數(shù)據(jù)元素 ai和ai之間(1< i < n)存在序偶 關(guān)系(ai-i,ai),且ai-i

5、稱為ai的前驅(qū),ai稱為ai的后繼。在這個(gè)序列中,ai無前驅(qū),an無后繼,其它每個(gè)元素有且僅有一個(gè)前驅(qū)和一個(gè)后繼。順序表的存儲(chǔ)結(jié)構(gòu)定義用MaxSize表示數(shù)組的長度,順序表的存儲(chǔ)結(jié)構(gòu)定義如下:#define MaxSize i00typedef structElemType dataMaxSize; / ElemType 表示不確定的數(shù)據(jù)類型int length;length表示線性表的長度 SeqList;順序表是隨機(jī)存取結(jié)構(gòu)設(shè)順序表的每個(gè)元素占用c個(gè)存儲(chǔ)單元,則第i個(gè)元素的存儲(chǔ)地址為:LOC ( a) = LOC ( aj +(i 1) x c順序表的優(yōu)缺點(diǎn)順序表利用了數(shù)組元素在物理位置上

6、的鄰接關(guān)系來表示線性表中數(shù)據(jù)元素之間的邏輯關(guān)系,這使得順 序表具有下列優(yōu)點(diǎn):無需為表示表中元素之間的邏輯關(guān)系而增加額外的存儲(chǔ)空間; 可以快速地存取表中任一位置的元素(即隨機(jī)存取)。同時(shí),順序表也具有下列缺點(diǎn):插入和刪除操作需移動(dòng)大量元素。在順序表上做插入和刪除操作,等概率情況下,平均要移動(dòng)表中 一半的元素。表的容量難以確定。由于數(shù)組的長度必須事先確定,因此,當(dāng)線性表的長度變化較大時(shí),難以確定 合適的存儲(chǔ)規(guī)模。造成存儲(chǔ)空間的“碎片”。數(shù)組要求占用連續(xù)的存儲(chǔ)空間,即使存儲(chǔ)單元數(shù)超過所需的數(shù)目,如果 不連續(xù)也不能使用,造成存儲(chǔ)空間的“碎片”現(xiàn)象。單鏈表的存儲(chǔ)結(jié)構(gòu)定義單鏈表的存儲(chǔ)結(jié)構(gòu)定義如下:Stru

7、ct Node ElemType data; / ElemType表示不確定的數(shù)據(jù)類型 struct Node *n ext; *first;/first為單鏈表的頭指針雙鏈表的存儲(chǔ)結(jié)構(gòu)定義雙鏈表存儲(chǔ)結(jié)構(gòu)定義如下: struct DulNodeElemType data; / ElemType表示不確定的數(shù)據(jù)類型 struct DulNode *prior, * next;/ prior 為前驅(qū)指針域,next 為后繼指針域 *first;/first表示雙鏈表的頭指針棧的定義棧是限定僅在表尾進(jìn)行插入和刪除操作的線性表。允許插入和刪除的一端稱為棧頂,另一端稱為棧底, 不含任何數(shù)據(jù)元素的棧稱為空

8、棧。棧的操作特性棧的操作具有 后進(jìn)先出的特性。隊(duì)列的定義隊(duì)列是只允許在一端進(jìn)行插入操作,而另一端進(jìn)行刪除操作的線性表。允許插入的一端稱為隊(duì)尾,允 許刪除的一端稱為隊(duì)頭。隊(duì)列的操作特性隊(duì)列的操作具有 先進(jìn)先出 的特性。循環(huán)隊(duì)列中解決隊(duì)空隊(duì)滿的判斷條件方法一:附設(shè)一個(gè)存儲(chǔ)隊(duì)列中元素個(gè)數(shù)的變量 num,當(dāng)num=0時(shí)隊(duì)空,當(dāng)num=QueueSize時(shí)為隊(duì)滿; 方法二:修改隊(duì)滿條件,浪費(fèi)一個(gè)元素空間,隊(duì)滿時(shí)數(shù)組中只有一個(gè)空閑單元;即隊(duì)空的條件是front=rear,隊(duì)滿的條件是(rear+1) % QueueSize=front,隊(duì)列長度為(rear-front+QueueSize) % Queue

9、Size。 方法三:設(shè)置標(biāo)志 flag,當(dāng)front=rear且flag=0時(shí)為隊(duì)空,當(dāng)front=rear且flag=1時(shí)為隊(duì)滿。串的定義串是零個(gè)或多個(gè)字符組成的有限序列??崭翊涂沾亩x只包含空格的串稱為 空格串。串中所包含的字符個(gè)數(shù)稱為串的長度,長度為0的串稱空串,記作”"串的比較串的比較是通過組成串的字符之間的比較來進(jìn)行的。給定兩個(gè)串:X="X1X2 Xn"Y="yiy2 ym"則當(dāng) n=m 且 X1=y1,Xn=ym 時(shí),稱 X=Y;當(dāng)下列條件之一成立時(shí),稱Xv Y: nvm,且 Xi=yi (i=1 , 2,,n); 存在某個(gè) k

10、w min( m, n),使得 Xi=yi (i=1, 2,,k-1) , Xk<y“改進(jìn)的模式匹配算法中nextj的求法用nextj表示tj對應(yīng)的k值(1wj w m),其定義如下:r o j=1nextj=maX k | 1w kv j 且"t1t2 tk -1 " =" tj-k+1tj-k+2 tj-1” ' 1 其它情況數(shù)組的基本操作數(shù)組是一個(gè)具有固定格式和數(shù)量的數(shù)據(jù)集合,在數(shù)組上一般不能做插入、刪除元素的操作。因此,在數(shù)組中通常只有兩種操作: 讀?。航o定一組下標(biāo),讀取相應(yīng)的數(shù)組元素; 修改:給定一組下標(biāo),存儲(chǔ)或修改相應(yīng)的數(shù)組元素。二維數(shù)組

11、的尋址按行優(yōu)先,設(shè)二維數(shù)組的行下標(biāo)與列下標(biāo)的范圍分別為li, hi與I2, h2,則任一元素 aj的存儲(chǔ)地址可由下式確定:LOC (aj) = LOC( ai1i2) + ( i li) x (h2 I2+1) + (j I2) x c特殊矩陣的定義特殊矩陣是指矩陣中有很多值相同的元素并且它們的分布有一定的規(guī)律。矩陣壓縮存儲(chǔ)的基本思想壓縮存儲(chǔ)的基本思想是:為多個(gè)值相同的元素只分配一個(gè)存儲(chǔ)空間;對零元素不分配存儲(chǔ)空間。對稱矩陣的壓縮存儲(chǔ)中:下三角元素aij (i >j)在一個(gè)數(shù)組SA中的下標(biāo)為:k = i x (i-i)/2 + j-i。上三角中的元素aij (ivj),則訪問和它對應(yīng)的下

12、三角中的元素aji即可,即:k = jx (j-1)/2 + i-i。三角矩陣的壓縮存儲(chǔ)中:下三角矩陣中任一元素 aj在一個(gè)數(shù)組SA中的下標(biāo)k與i、j的對應(yīng)關(guān)系為:| i x (i-i)/2 + j-i當(dāng) i>jI nx (n + i)/2當(dāng) ivj上三角矩陣元素 aj在SA中的下標(biāo)為:k =(i-i) x (2n-i+2)/2+(j-i)。稀疏矩陣的壓縮存儲(chǔ)方式三元組順序表和十字鏈表三元組的定義struct eleme nt int row, col;ElemType item;廣義表的定義廣義表是n (n0)個(gè)數(shù)據(jù)元素的有限序列。表頭當(dāng)廣義表LS非空時(shí),稱第一個(gè)元素為LS的表頭;表尾

13、稱廣義表LS中除去表頭后其余元素組成的廣義表為LS的。長度廣義表LS中的直接元素的個(gè)數(shù)稱為LS的長度;深度廣義表LS中括號的最大嵌套層數(shù)稱為LS的深度。樹的定義樹是n ( n0)個(gè)結(jié)點(diǎn)的有限集合。當(dāng)n= 0時(shí),稱為空樹;任意一棵非空樹滿足以下條件: 有且僅有一個(gè)特定的稱為 根的結(jié)點(diǎn); 當(dāng)n> 1時(shí),除根結(jié)點(diǎn)之外的其余結(jié)點(diǎn)被分成m (m>0)個(gè)互不相交的有限集合,T?,,Tm,其中每個(gè)集合又是一棵樹,并稱為這個(gè)根結(jié)點(diǎn)的子樹。結(jié)點(diǎn)的度、樹的度某結(jié)點(diǎn)所擁有的子樹的個(gè)數(shù)稱為該結(jié)點(diǎn)的度;樹中各結(jié)點(diǎn)度的最大值稱為該樹的度。葉子結(jié)點(diǎn)、分支結(jié)點(diǎn)度為0的結(jié)點(diǎn)稱為葉子結(jié)點(diǎn),也稱為終端結(jié)點(diǎn);度不為 0的

14、結(jié)點(diǎn)稱為分支結(jié)點(diǎn),也稱為非終端結(jié)點(diǎn)。孩子結(jié)點(diǎn)、雙親結(jié)點(diǎn)、兄弟結(jié)點(diǎn)某結(jié)點(diǎn)的子樹的根結(jié)點(diǎn)稱為該結(jié)點(diǎn)的孩子結(jié)點(diǎn);反之,該結(jié)點(diǎn)稱為其孩子結(jié)點(diǎn)的雙親路徑、路徑長度如果樹的結(jié)點(diǎn)序列ni, n2,nk滿足如下關(guān)系:結(jié)點(diǎn)m是結(jié)點(diǎn)口+勺的雙親(K i v k),則把n2,nk 稱為一條由ni至nk的路徑;路徑上經(jīng)過的邊的個(gè)數(shù)稱為路徑長度。祖先、子孫如果從結(jié)點(diǎn)x到結(jié)點(diǎn)y有一條路徑,那么 x就稱為y的祖先,而y稱為x的子孫。注意:某結(jié)點(diǎn)子樹中的任一結(jié)點(diǎn)都是該結(jié)點(diǎn)的子孫。結(jié)點(diǎn)的層數(shù)、樹的深度(高度)規(guī)定根結(jié)點(diǎn)的層數(shù)為1,對其余任何結(jié)點(diǎn),若某結(jié)點(diǎn)在第k層,則其孩子結(jié)點(diǎn)在第 k+1層;樹中所有結(jié)點(diǎn)的最大層數(shù)稱為樹的深度,

15、也稱為樹的高度。二叉樹的定義二叉樹是n (n > 0)個(gè)結(jié)點(diǎn)的有限集合,該集合或者為空集(稱為空二叉樹),或者由一個(gè)根結(jié)點(diǎn)和兩 棵互不相交的、分別稱為根結(jié)點(diǎn)的左子樹和右子樹的二叉樹組成。二叉樹的特點(diǎn)二叉樹的特點(diǎn)是: 每個(gè)結(jié)點(diǎn)最多有兩棵子樹,所以二叉樹中不存在度大于2的結(jié)點(diǎn); 子樹的次序不能任意顛倒,某結(jié)點(diǎn)即使只有一棵子樹也要區(qū)分是左子樹還是右子樹。注意:二叉樹和樹是兩種樹結(jié)構(gòu)。二叉樹的基本形態(tài)二叉樹具有五種基本形態(tài):空二叉樹; 只有一個(gè)根結(jié)點(diǎn); 根結(jié)點(diǎn)只有左子樹; 根結(jié)點(diǎn)只有右子樹; 根結(jié)點(diǎn)既有左子樹又有右子樹。斜樹所有結(jié)點(diǎn)都只有左子樹的二叉樹稱為左斜樹;所有結(jié)點(diǎn)都只有右子樹的二叉樹稱為

16、右斜樹;左斜樹和 右斜樹統(tǒng)稱為斜樹。斜樹的特點(diǎn):每一層只有一個(gè)結(jié)點(diǎn),即只有度為1和度為0的結(jié)點(diǎn)并且只有一個(gè)葉子結(jié)點(diǎn); 斜樹的結(jié)點(diǎn)個(gè)數(shù)與其深度相同。滿二叉樹在一棵二叉樹中,如果所有分支結(jié)點(diǎn)都存在左子樹和右子樹,并且所有葉子都在同一層上,這樣的二 叉樹稱為滿二叉樹。滿二叉樹的特點(diǎn): 葉子結(jié)點(diǎn)都在最下一層;只有度為0和度為2的結(jié)點(diǎn)。完全二叉樹對一棵具有n個(gè)結(jié)點(diǎn)的二叉樹按層序編號,如果編號為i( 1<iwn)的結(jié)點(diǎn)與同樣深度的滿二叉樹中編號為i的結(jié)點(diǎn)在二叉樹中的位置完全相同,則這棵二叉樹稱為完全二叉樹。完全二叉樹的特點(diǎn)是: 葉子結(jié)點(diǎn)只能出現(xiàn)在最下兩層,且最下層的葉子結(jié)點(diǎn)都集中在左面連續(xù)的位 置;

17、 如果有度為1的結(jié)點(diǎn),只可能有一個(gè),且該結(jié)點(diǎn)只有左孩子。二叉樹的基本性質(zhì)性質(zhì)1二叉樹的第i層上最多有2i-1個(gè)結(jié)點(diǎn)(i1)。性質(zhì)2在一棵深度為k的二叉樹中,最多有 2k-1個(gè)結(jié)點(diǎn),最少有 k個(gè)結(jié)點(diǎn)。性質(zhì)3在一棵二叉樹中,如果葉子結(jié)點(diǎn)的個(gè)數(shù)為n0,度為2的結(jié)點(diǎn)個(gè)數(shù)為n2,則n°= n2 + 1 °性質(zhì)4具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度為Hlog 2 n 1 o性質(zhì)5對一棵具有n個(gè)結(jié)點(diǎn)的完全二叉樹中的結(jié)點(diǎn)從1開始按層序編號,則對于任意的編號為i (1< iw n)的結(jié)點(diǎn)(簡稱為結(jié)點(diǎn)i),有:如果i> 1,則結(jié)點(diǎn)i的雙親的編號為|/2 ;否則結(jié)點(diǎn)i是根結(jié)點(diǎn),無雙親;如果

18、2i w n,則結(jié)點(diǎn)i的左孩子的編號為 2i ;否則結(jié)點(diǎn)i無左孩子; 如果2i + 1w n,則結(jié)點(diǎn)i的右孩子的編號為 2i + 1 ;否則結(jié)點(diǎn)i無右孩子。二叉樹的存儲(chǔ)包括:二叉樹的順序存儲(chǔ)和二叉樹的鏈?zhǔn)酱鎯?chǔ)。二叉鏈表的存儲(chǔ)結(jié)構(gòu)定義如下:struct BiNodeElemType data;BiNode *lchild, *rchild; *root;/root表示二叉鏈表的頭指針struct TriNodeElemType data;TriNode *lchild, *rchild, *pare nt;/ pare nt 指向該結(jié)點(diǎn)的雙親 *root;/三叉鏈表的頭指針遍歷的含義所謂遍歷就是

19、無重復(fù)無遺漏地訪問。二叉樹的遍歷是指從根結(jié)點(diǎn)出發(fā),按照某種次序訪問二叉樹中的 所有結(jié)點(diǎn),使得每個(gè)結(jié)點(diǎn)被訪問一次且僅被訪問一次。二叉樹的遍歷次序定義前序遍歷(或稱前根遍歷、先序遍歷)若二叉樹為空,則空操作返回;否則訪問根結(jié)點(diǎn); 前序遍歷根結(jié)點(diǎn)的左子樹;前序遍歷根結(jié)點(diǎn)的右子樹。中序遍歷(或稱中根遍歷)若二叉樹為空,則空操作返回;否則 中序遍歷根結(jié)點(diǎn)的左子樹;訪問根結(jié)點(diǎn);中序遍歷根結(jié)點(diǎn)的右子樹。后序遍歷(或稱后根遍歷)若二叉樹為空,則空操作返回;否則 后序遍歷根結(jié)點(diǎn)的左子樹; 后序遍歷根結(jié)點(diǎn)的右子樹;訪問根結(jié)點(diǎn)。層序遍歷二叉樹的層序遍歷是從二叉樹的第一層(根結(jié)點(diǎn))開始,從上至下逐層遍歷,在同一層中,

20、則按從左 到右的順序?qū)Y(jié)點(diǎn)逐個(gè)訪問。線索二叉樹的定義在一個(gè)具有n個(gè)結(jié)點(diǎn)的二叉鏈表中,利用 n+1個(gè)空指針域存放指向該結(jié)點(diǎn)在某種遍歷序列中的前驅(qū)和 后繼結(jié)點(diǎn)的指針,這些指向前驅(qū)和后繼結(jié)點(diǎn)的指針稱為線索,加上線索的二叉樹稱為線索二叉樹,相應(yīng)地,加上線索的二叉鏈表稱為線索鏈表。線索二叉樹的存儲(chǔ)結(jié)構(gòu)定義線索鏈表中的結(jié)點(diǎn)定義如下:enum flag Child, Thread;枚舉類型,枚舉常量 Child=0,Thread=1struct ThrNodeElemType data; / ElemType表示不確定的數(shù)據(jù)類型ThrNode *lchild, *rchild;flag ltag, rtag

21、;*root;/root表示線索鏈表的頭指針樹的存儲(chǔ)結(jié)構(gòu)包括:雙親表示法、孩子表示法、孩子兄弟表示法。雙親表示法的存儲(chǔ)結(jié)構(gòu)定義如下:/樹中最大結(jié)點(diǎn)個(gè)數(shù)/數(shù)組元素的類型樹中結(jié)點(diǎn)的數(shù)據(jù)信息,/該結(jié)點(diǎn)的雙親在數(shù)組中的下標(biāo)#defi ne MaxSize 100; struct PNodeElemType data; int pare nt;PNode TreeMaxSize;孩子表示法的存儲(chǔ)結(jié)構(gòu)定義如下:struct CTNode/ 孩子結(jié)點(diǎn)int child;CTNode *n ext;struct CBNode/ 表頭結(jié)點(diǎn)ElemType data;CTNode *firstchild;/指向孩

22、子鏈表的頭指針;孩子兄弟表示法又稱為二叉鏈表表示法,存儲(chǔ)結(jié)構(gòu)定義如下:struct TNode/ ElemType表示不確定的數(shù)據(jù)類型 /firstchild指向該結(jié)點(diǎn)的第一個(gè)孩子 /rightsib指向該結(jié)點(diǎn)的右兄弟ElemType data;TNode *firstchild;TNode *rightsib; ;樹轉(zhuǎn)換為二叉樹樹轉(zhuǎn)換為二叉樹的方法是:加線樹中所有相鄰兄弟結(jié)點(diǎn)之間加一條連線;去線一一對樹中的每個(gè)結(jié)點(diǎn),只保留它與第一個(gè)孩子結(jié)點(diǎn)之間的連線,刪去它與其它孩子結(jié)點(diǎn)之間 的連線; 層次調(diào)整一一以根結(jié)點(diǎn)為軸心,將樹順時(shí)針轉(zhuǎn)動(dòng)一定的角度,使之層次分明。森林轉(zhuǎn)換為二叉樹森林轉(zhuǎn)換為二叉樹的方法

23、如下: 將森林中的每棵樹轉(zhuǎn)換成二叉樹; 從第二棵二叉樹開始,依次把后一棵二叉樹的根結(jié)點(diǎn)作為前一棵二叉樹根結(jié)點(diǎn)的右孩子,當(dāng)所有二 叉樹連起來后,所得到的二叉樹就是由森林轉(zhuǎn)換的二叉樹。二叉樹轉(zhuǎn)換為樹或森林樹和森林轉(zhuǎn)換為二叉樹的過程是可逆的,將一棵二叉樹還原為樹或森林的方法如下:加線一一若某結(jié)點(diǎn)x是其雙親y的左孩子,則把結(jié)點(diǎn) x的右孩子、右孩子的右孩子、,都與結(jié) 點(diǎn)y用線連起來; 去線一一刪去原二叉樹中所有的雙親結(jié)點(diǎn)與右孩子結(jié)點(diǎn)的連線; 層次調(diào)整一一整理由、兩步所得到的樹或森林,使之層次分明。樹的遍歷序列與二叉樹的遍歷序列之間的對應(yīng)關(guān)系根據(jù)樹與二叉樹的轉(zhuǎn)換關(guān)系以及樹和二叉樹遍歷的操作定義可知,樹的遍

24、歷序列與由樹轉(zhuǎn)化成的二叉 樹的遍歷序列之間具有如下對應(yīng)關(guān)系:樹的前序遍歷序列等于二叉樹的前序遍歷序列,樹的后序遍歷序列 等于二叉樹的中序遍歷序列。哈夫曼樹中葉子結(jié)點(diǎn)的權(quán)值葉子結(jié)點(diǎn)的權(quán)值是指對葉子結(jié)點(diǎn)賦予的一個(gè)有意義的數(shù)值量。二叉樹的帶權(quán)路徑長度設(shè)二叉樹具有 n個(gè)帶權(quán)值的葉子結(jié)點(diǎn),從根結(jié)點(diǎn)到各個(gè)葉子結(jié)點(diǎn)的路徑長度與相應(yīng)葉子結(jié)點(diǎn)權(quán)值的乘 積之和稱做二叉樹的帶權(quán)路徑長度,記為:nWPL=wk Ikk =1其中,Wk為第k個(gè)葉子結(jié)點(diǎn)的權(quán)值;Ik為從根結(jié)點(diǎn)到第k個(gè)葉子結(jié)點(diǎn)的路徑長度。哈夫曼樹定義給定一組具有確定權(quán)值的葉子結(jié)點(diǎn),可以構(gòu)造出不同的二叉樹,將其中帶權(quán)路徑長度最小的二叉樹稱 為哈夫曼樹,也稱為最

25、優(yōu)二叉樹。哈夫曼算法的基本思想哈夫曼算法的基本思想是: 初始化:由給定的 n個(gè)權(quán)值W1, W2,,Wn構(gòu)造n棵只有一個(gè)根結(jié)點(diǎn)的二叉樹,從而得到一個(gè)二 叉樹集合F = ,T2,,Tn; 選取與合并:在F中選取根結(jié)點(diǎn)的權(quán)值最小的兩棵二叉樹分別作為左、右子樹構(gòu)造一棵新的二叉樹,這棵新二叉樹的根結(jié)點(diǎn)的權(quán)值為其左、右子樹根結(jié)點(diǎn)的權(quán)值之和;刪除與加入:在F中刪除作為左、右子樹的兩棵二叉樹,并將新建立的二叉樹加入到F中; 重復(fù)、兩步,當(dāng)集合 F中只剩下一棵二叉樹時(shí),這棵二叉樹便是哈夫曼樹。圖的定義圖是由頂點(diǎn)的有窮非空集合和頂點(diǎn)之間邊的集合組成,通常表示為:G = (V, E)其中,G表示一個(gè)圖,V是圖G中頂

26、點(diǎn)的集合,E是圖G中頂點(diǎn)之間邊的集合。無向圖與有向圖若頂點(diǎn)Vi和Vj之間的邊沒有方向,則稱這條邊為無向邊,用無序偶對(Vi, Vj)來表示;若從頂點(diǎn) Vi到Vj的邊有方向,則稱這條邊為有向邊(也稱為弧),用有序偶對Vi, Vj來表示,Vi稱為弧尾,Vj稱為弧頭。如果圖的任意兩個(gè)頂點(diǎn)之間的邊都是無向邊,則稱該圖為無向圖,否則稱該圖為 有向圖。簡單圖若不存在頂點(diǎn)到其自身的邊,且同一條邊不重復(fù)出現(xiàn),則稱這樣的圖為簡單圖。鄰接、依附在無向圖中,對于任意兩個(gè)頂點(diǎn)Vi和Vj,若存在邊(Vi,Vj),則稱頂點(diǎn)Vi和Vj互為鄰接點(diǎn),同時(shí)稱邊(Vj,Vj)依附于頂點(diǎn)Vi和Vj。在有向圖中,對于任意兩個(gè)頂點(diǎn)Vi和

27、Vj,若存在弧Vj,Vj,則稱頂點(diǎn)Vj是Vi的鄰接點(diǎn),同時(shí)稱弧 Vj,Vj依附于頂點(diǎn)Vi和Vj。無向完全圖、有向完全圖在無向圖中,如果任意兩個(gè)頂點(diǎn)之間都存在邊,則稱該圖為無向完全圖。含有n個(gè)頂點(diǎn)的無向完全圖有 n x (n-1)/2 條邊。在有向圖中,如果任意兩頂點(diǎn)之間都存在方向互為相反的兩條弧,則稱該圖為有向完全圖。含有n個(gè)頂點(diǎn)的有向完全圖有 n x (n-1)條邊。稠密圖、稀疏圖稱邊數(shù)很少的圖為稀疏圖,反之,稱為稠密圖。頂點(diǎn)的度、入度、出度在無向圖中,頂點(diǎn)V的度是指依附于該頂點(diǎn)的邊的個(gè)數(shù),記為TD(v)。在具有n個(gè)頂點(diǎn)e條邊的無向圖中,有下式成立:n' TD(Vi) =2ei T在

28、有向圖中,頂點(diǎn) V的入度是指以該頂點(diǎn)為弧頭的弧的個(gè)數(shù),記為ID(V);頂點(diǎn)V的出度是指以該頂點(diǎn)為弧尾的弧的個(gè)數(shù),記為OD(v)。在具有n個(gè)頂點(diǎn)e條邊的有向圖中,有下式成立:nnTD(Vj) = 6OD(Vi) =ei Ti d連通圖、連通分量在無向圖中,若任意頂點(diǎn) Vj和Vj(iM j)之間有路徑,則稱該圖是連通圖。非連通圖的極大連通子圖稱為 連通分量。強(qiáng)連通圖、強(qiáng)連通分量在有向圖中,對任意頂點(diǎn)vi和Vj(iz j),若從頂點(diǎn)vi到vj和從頂點(diǎn)vj到vi均有路徑,則稱該有向圖是強(qiáng) 連通圖。非強(qiáng)連通圖的極大強(qiáng)連通子圖稱為強(qiáng)連通分量。鄰接矩陣的存儲(chǔ)結(jié)構(gòu)定義假設(shè)圖G = (V, E)有n個(gè)頂點(diǎn),則鄰

29、接矩陣是一個(gè)nxn的方陣,定義為:若(Vi, Vj) E 或<Vi, Vj> E否則鄰接矩陣的存儲(chǔ)結(jié)構(gòu)定義如下:#defi ne MaxSize 10typedef structElemType vertexMaxSize;/存放圖中頂點(diǎn)的信息,ElemType表示不確定的數(shù)據(jù)類型int arcMaxSizeMaxSize;存放圖中邊的信息in t vertexNum, arcNum;/圖的頂點(diǎn)數(shù)和邊數(shù) MGraph;鄰接表的存儲(chǔ)結(jié)構(gòu)定義鄰接表是一種順序存儲(chǔ)與鏈接存儲(chǔ)相結(jié)合的存儲(chǔ)方法,具體方法為:將頂點(diǎn)Vi的所有鄰接點(diǎn)鏈成一個(gè)單鏈表,稱為頂點(diǎn) Vi的邊表(對于有向圖則稱為出邊表),

30、邊表的頭指針和頂點(diǎn)的數(shù)據(jù)信息采用順序存儲(chǔ)(稱為頂點(diǎn)表)。所以,在鄰接表中存在兩種結(jié)點(diǎn):頂點(diǎn)表結(jié)點(diǎn)和邊表結(jié)點(diǎn)。vertexfirstedgeadjvexn ext頂點(diǎn)表結(jié)點(diǎn)邊表結(jié)點(diǎn)鄰接表表示的結(jié)點(diǎn)結(jié)構(gòu)其中,vertex:數(shù)據(jù)域,存放頂點(diǎn)信息;firstedge:指針域,邊表的頭指針;adjvex :鄰接點(diǎn)域,存放邊該頂點(diǎn)的鄰接點(diǎn)在頂點(diǎn)表中的下標(biāo);n ext :指針域,指向邊表中的下一個(gè)結(jié)點(diǎn)。鄰接表的存儲(chǔ)結(jié)構(gòu)定義如下:struct ArcNode/定義邊表結(jié)點(diǎn)int adjvex;/鄰接點(diǎn)域ArcNode *n ext;struct VertexNode定義頂點(diǎn)表結(jié)點(diǎn)ElemType vertex

31、; / ElemType表示不確定的數(shù)據(jù)類型ArcNode *firstedge;#define MaxSize 10typedef structVertexNode adjlistMaxSize;/ 頂點(diǎn)表in t vertexNum, arcNum;/圖的頂點(diǎn)數(shù)和邊數(shù) ALGraph;圖的遍歷次序定義深度優(yōu)先遍歷從圖中某頂點(diǎn)v出發(fā)進(jìn)行深度優(yōu)先遍歷的基本思想是: 訪問頂點(diǎn)v; 從v的未被訪問的鄰接點(diǎn)中選取一個(gè)頂點(diǎn)W,從w出發(fā)進(jìn)行深度優(yōu)先遍歷; 重復(fù)上述兩步,直至圖中所有和v有路徑相通的頂點(diǎn)都被訪問到。廣度優(yōu)先遍歷從圖中某頂點(diǎn)v出發(fā)進(jìn)行廣度優(yōu)先遍歷的基本思想是: 訪問頂點(diǎn)v; 依次訪問v的各個(gè)

32、未被訪問的鄰接點(diǎn) v1, v, , vk; 分別從v1, v2,,vk出發(fā)依次訪問它們未被訪問的鄰接點(diǎn),直至圖中所有與頂點(diǎn)v有路徑相通的頂點(diǎn)都被訪問到。最小生成樹的定義設(shè)G=(V, E)是一個(gè)無向連通網(wǎng),生成樹上各邊的權(quán)值之和稱為該生成樹的代價(jià),在G的所有生成樹 中,代價(jià)最小的生成樹稱為最小生成樹。普里姆(Prim )算法的基本思想設(shè)G=(V, E)是一個(gè)無向連通網(wǎng), 令T=(U,TE)是G的最小生成樹。T的初始狀態(tài)為 U=v。 (vo V), TE= ,然后重復(fù)執(zhí)行下述操作:在所有 u U , v V-U的邊中找一條代價(jià)最小的邊 (u, v)并入邊集TE, 同時(shí)v并入頂點(diǎn)集U,直至U=V為止

33、??唆斔箍?Kruskal )算法的基本思想設(shè)無向連通網(wǎng)為 G= (V, E),令G的最小生成樹為 T=(U , TE),其初態(tài)為U = V, TE=,然后按照 邊的權(quán)值由小到大的順序,依次考察邊集E中的各條邊。若被考察邊的兩個(gè)頂點(diǎn)屬于T的兩個(gè)不同的連通分量,則將此邊加入到 TE中,同時(shí)把兩個(gè)連通分量連接為一個(gè)連通分量;若被考察邊的兩個(gè)頂點(diǎn)屬于同一 個(gè)連通分量,則舍去此邊,以免造成回路。如此下去,當(dāng)T中的連通分量個(gè)數(shù)為 1時(shí),此連通分量便為 G的一棵最小生成樹。迪杰斯特拉(Dijkstra )算法的基本思想設(shè)置集合S存放已經(jīng)找到最短路徑的頂點(diǎn),S的初始狀態(tài)只包含源點(diǎn) v,對v& V-

34、S,假設(shè)從源點(diǎn)v到Vi的有向邊為最短路徑。以后每求得一條最短路徑v,vk,就將vk加入集合S中,并將路徑v,vk, Vi與原來的假設(shè)相比較,取路徑長度較小者為當(dāng)前最短路徑。重復(fù)上述過程,直到集合V中全部頂點(diǎn)加入到集合S中。Floyd算法的基本思想假設(shè)從vi到vj的弧(若從w到vj的弧不存在,則將其弧的權(quán)值看成R)是最短路徑,然后進(jìn)行n次試探。若vi,vk和vk,vj分別是從vi到vk和從vk到vj中間頂點(diǎn)的序號不大于 k- 1的最短路徑,則將, vk,vj和已經(jīng)得到的從 vi到vj中間頂點(diǎn)的序號不大于 k-1的最短路徑相比較,取長度較短者為從 vi到vj 中間頂點(diǎn)的序號不大于 k的最短路徑。A

35、OV網(wǎng)的定義在一個(gè)表示工程的有向圖中,用頂點(diǎn)表示活動(dòng),用弧表示活動(dòng)之間的優(yōu)先關(guān)系,稱這樣的有向圖為頂 點(diǎn)表示活動(dòng)的網(wǎng),簡稱 AOV網(wǎng)。拓?fù)湫蛄械亩x設(shè)G=(V, E)是一個(gè)具有n個(gè)頂點(diǎn)的有向圖,V中的頂點(diǎn)序列 w, v2,vn稱為一個(gè)拓?fù)湫蛄?,?dāng)且僅 當(dāng)滿足下列條件:若從頂點(diǎn)vi到vj有一條路徑,則在頂點(diǎn)序列中頂點(diǎn)vi必在頂點(diǎn)vj之前。拓?fù)渑判虻幕舅枷雽OV網(wǎng)進(jìn)行拓?fù)渑判虻幕舅枷胧牵?從AOV網(wǎng)中選擇一個(gè)沒有前驅(qū)的頂點(diǎn)并且輸出它; 從AOV網(wǎng)中刪去該頂點(diǎn),并且刪去所有以該頂點(diǎn)為尾的??; 重復(fù)上述兩步,直到全部頂點(diǎn)都被輸出,或AOV網(wǎng)中不存在沒有前驅(qū)的頂點(diǎn)。查找算法的時(shí)間性能查找算法用關(guān)鍵

36、碼的比較次數(shù)來度量查找算法的時(shí)間性能。對于查找成功的情況,將關(guān)鍵碼比較次數(shù) 的數(shù)學(xué)期望值定義為平均查找長度,即:nASL 八 pi cii T其中,n表示問題規(guī)模,即查找集合中的記錄個(gè)數(shù);pi表示查找第i個(gè)記錄的概率;c表示查找第i個(gè)記錄所需的關(guān)鍵碼的比較次數(shù)。順序查找算法的時(shí)間復(fù)雜度對于具有n個(gè)記錄的順序表,查找第 i個(gè)記錄時(shí),需進(jìn)行 n-i+1次關(guān)鍵碼的比較。設(shè)每個(gè)記錄的查找概 率相等,查找成功時(shí),順序查找的平均查找長度為:0 (n);查找不成功時(shí),關(guān)鍵碼的比較次數(shù)是n+1次,則查找失敗的平均查找長度為0( n)。順序查找的適用情況順序查找對表中記錄的存儲(chǔ)沒有任何要求,順序存儲(chǔ)和鏈接存儲(chǔ)均

37、可應(yīng)用;對表中記錄的有序性也沒 有要求,無論記錄是否按關(guān)鍵碼有序均可應(yīng)用。折半查找的適用情況折半查找(也稱對半查找、對分查找、二分查找)要求線性表中的記錄必須按關(guān)鍵碼有序,并且必須 采用順序存儲(chǔ)。折半查找的基本思想取有序表的中間記錄作為比較對象,則(1) 若給定值與中間記錄的關(guān)鍵碼相等,則查找成功;(2) 若給定值小于中間記錄的關(guān)鍵碼,則在中間記錄的左半?yún)^(qū)繼續(xù)查找;(3) 若給定值大于中間記錄的關(guān)鍵碼,則在中間記錄的右半?yún)^(qū)繼續(xù)查找。不斷重復(fù)上述過程,直到查找成功,或所查找的區(qū)域無記錄,查找失敗。折半查找的時(shí)間復(fù)雜度具有n個(gè)結(jié)點(diǎn)的折半查找判定樹的深度為|log2 nj,1。最好情況:比較1次,即

38、查找的關(guān)鍵碼是判定樹的根結(jié)點(diǎn);最壞情況:比較次數(shù)為log2 n 1,即查找的關(guān)鍵碼是判定樹的最下一層結(jié)點(diǎn);平均情況:折半查找的平均時(shí)間復(fù)雜度為O(log2 n)。查找不成功的比較次數(shù)最多不超過樹的深度,最多為|l|og2 n 1次。二叉排序樹的定義二叉排序樹或者是一棵空的二叉樹,或者是具有下列性質(zhì)的二叉樹: 若它的左子樹不空,則左子樹上所有結(jié)點(diǎn)的值均小于根結(jié)點(diǎn)的值; 若它的右子樹不空,則右子樹上所有結(jié)點(diǎn)的值均大于根結(jié)點(diǎn)的值;它的左右子樹也都是二叉排序樹。二叉排序樹的查找性能如果二叉排序樹是平衡的,則其查找效率為O(log2n)。如果二叉排序樹為一棵斜樹,則其查找效率為0(n)。因此,二叉排序樹

39、的查找性能在O(log2n)和0(n)之間。平衡二叉樹的定義平衡二叉樹或者是一棵空的二叉排序樹,或者是具有下列性質(zhì)的二叉排序樹:根結(jié)點(diǎn)的左子樹和右子樹的深度最多相差1。根結(jié)點(diǎn)的左子樹和右子樹也都是平衡二叉樹。構(gòu)造平衡二叉樹的基本思想在構(gòu)造二叉排序樹的過程中,每當(dāng)插入一個(gè)結(jié)點(diǎn)時(shí),首先檢查是否因插入而破壞了樹的平衡性,若是 則找出最小不平衡子樹,在保持二叉排序樹特性的前提下,調(diào)整最小不平衡子樹中各結(jié)點(diǎn)之間的鏈接關(guān)系, 進(jìn)行相應(yīng)的旋轉(zhuǎn),使之成為新的平衡子樹。平衡調(diào)整的四種類型x插在根結(jié)點(diǎn) x插在根結(jié)點(diǎn) x插在根結(jié)點(diǎn) x插在根結(jié)點(diǎn)A的左孩子的左子樹上。A的右孩子的右子樹上。A的左孩子的右子樹上。A的右

40、孩子的左子樹上。設(shè)結(jié)點(diǎn)A為最小不平衡子樹的根結(jié)點(diǎn),對該子樹進(jìn)行平衡化調(diào)整有以下四種情況: LL型:結(jié)點(diǎn)RR型:結(jié)點(diǎn)LR型:結(jié)點(diǎn)RL型:結(jié)點(diǎn)散列查找的基本思想散列查找也稱為哈希查找、Hash查找,其基本思想是:在記錄的存儲(chǔ)位置和它的關(guān)鍵碼之間建立一個(gè)確定的對應(yīng)關(guān)系 H,使得每個(gè)關(guān)鍵碼 key和唯一的一個(gè)存儲(chǔ)位置 H(key)相對應(yīng)。在查找時(shí),根據(jù)這個(gè)確定 的對應(yīng)關(guān)系找到給定值 k的映射H(k),若查找集合中存在這個(gè)記錄,則必定在H( k)的位置上。散列查找的基本概念采用散列技術(shù)將記錄存儲(chǔ)在一塊連續(xù)的存儲(chǔ)空間中,這塊連續(xù)的存儲(chǔ)空間稱為散列表,將關(guān)鍵碼映射為散列表中適當(dāng)存儲(chǔ)位置的函數(shù)稱為散列函數(shù),所

41、得的存儲(chǔ)位置址稱為散列地址。對于兩個(gè)不同的關(guān)鍵碼ki k2,有H(kd = H(k2),即兩個(gè)不同的記錄需要存放在同一個(gè)存儲(chǔ)位置,這種現(xiàn)象稱為沖突,ki和k2相對于H稱做同義詞。散列查找的關(guān)鍵問題采用散列技術(shù)需要考慮的兩個(gè)關(guān)鍵問題是:散列函數(shù)的設(shè)計(jì)。如何設(shè)計(jì)一個(gè)簡單、均勻、存儲(chǔ)利用率高的散列函數(shù)。沖突的處理。如何采取合適的處理沖突方法來解決沖突。處理沖突的方法開放定址法用開放定址法處理沖突得到的散列表叫做閉散列表。所謂開放定址法,就是由關(guān)鍵碼得到的散列地址一旦產(chǎn)生了沖突,就去尋找下一個(gè)空的散列地址,只要散列表足夠大,空的散列地址總能找到,并將記錄存入。 線性探測法當(dāng)發(fā)生沖突時(shí),線性探測法從沖突

42、位置的下一個(gè)位置起,依次尋找空的散列地址,即對于鍵值key,設(shè)H( key) =d,閉散列表的長度為 m,則發(fā)生沖突時(shí),尋找下一個(gè)散列地址的公式為:Hi=(H(key) + di) % m (dj=i, 2,m-1)。線性探測法會(huì)出現(xiàn)非同義詞之間對同一個(gè)散列地址爭奪的現(xiàn)象,稱為堆積或聚集。 二次探測法當(dāng)發(fā)生沖突時(shí),二次探測法尋找下一個(gè)散列地址的公式為:Hi=(H(key) + di)% m (di=l2,- 12,22, 22,q2,- q2 且 qw m/2) 隨機(jī)探測法當(dāng)發(fā)生沖突時(shí),隨機(jī)探測法探測下一個(gè)散列地址的位移量是一個(gè)隨機(jī)數(shù)列,即尋找下一個(gè)散列地址的公式為:Hi=(H(key)+di

43、) % m( di 是一個(gè)隨機(jī)數(shù)列,i=1,2,m-1)拉鏈法(鏈地址法)用拉鏈法處理沖突構(gòu)造的散列表叫做開散列表。拉鏈法的基本思想是:將所有散列地址相同的記錄,即所有關(guān)鍵碼為同義詞的記錄存儲(chǔ)在一個(gè)單鏈表 中稱為同義詞子表,在散列表中存儲(chǔ)的是所有同義詞子表的頭指針。直接插入排序的基本思想直接插入排序的基本思想是:依次將待排序序列中的每一個(gè)記錄插入到一個(gè)已排好序的序列中,直到 全部記錄都排好序。直接插入排序算法的性能時(shí)間性能最好情況:待排序序列為正序,時(shí)間復(fù)雜度為0(n);最壞情況:待排序序列為逆序,時(shí)間復(fù)雜度為0( n2)。平均情況:待排序序列中各種可能排列的概率相同,時(shí)間復(fù)雜度為0(n2)。

溫馨提示

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

評論

0/150

提交評論