內容接自《資料結構基礎知識(1)》。。。
鏈表的分類
單鏈表
單鏈表是一種鏈式存取的結構,為找第 i 個資料元素,必須先找到第 i-1 個資料元素。圖中陰影地區表示資料域,空白區表示指標域。而且最後一個指標域為空白。
迴圈鏈表
迴圈鏈表是另一種形式的鏈式存貯結構。它的特點是表中最後一個結點的指標域指向頭結點,整個鏈表形成一個環。迴圈鏈表又分為單迴圈鏈表和多重鏈的迴圈鏈表。
雙鏈表
雙鏈表也稱為雙向鏈表,是鏈表的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。雙鏈表的靈活度要比單鏈表好一些,但開支要大一些(存在兩個指標)。
順序表與鏈表的比較
順序表格儲存體位置是相鄰連續的,可以隨即訪問的一種資料結構,一個順序表在使用前必須指定起長度,一旦分配記憶體,則在使用中不可以動態更改。他的優點是訪問資料是比較方便,可以隨即的訪問表中的任何一個資料。
鏈表是通過指標來描述元素關係的一種資料結構,他可以是物理地址不連續的物理空間。不能隨即訪問鏈表元素,必須從表頭開始,一步一步搜尋元素。它的優點是:對於數組,可以動態改變資料的長度,分配物理空間。
在使用中:如果一個數組在使用中,查詢比較多,而插入,刪除資料比較少,數組的長度不變時,選順序表比較合理。如果插入,刪除,長度不定的數組,可以選鏈表。
樹(Tree)
樹是包含n(n>0)個結點的有窮集合K,且在K中定義了一個關係N,N滿足 以下條件:
(1)有且僅有一個結點 K0,他對於關係N來說沒有前驅,稱K0為樹的根結點。簡稱為根(root)。
(2)除K0外,K中的每個結點,對於關係N來說有且僅有一個前驅。
(3)K中各結點,對關係N來說可以有m個後繼(m>=0)。
樹具有以下特點:
(1) 每個節點有零個或多個子節點。
(2) 每個子節點只有一個父節點。
(3) 沒有父節點的節點稱為根節點。
關於樹的一些術語
節點的度:一個節點含有的子樹的個數稱為該節點的度;
分葉節點或終端節點:度為零的節點稱為分葉節點;
非終端節點或分支節點:度不為零的節點;
雙親節點或父節點:若一個結點含有子節點,則這個節點稱為其子節點的父節點;
孩子節點或子節點:一個節點含有的子樹的根節點稱為該節點的子節點;
兄弟節點:具有相同父節點的節點互稱為兄弟節點;
樹的高度或深度:定義一棵樹的根結點層次為1,其他節點的層次是其父結點層次加1。一棵樹中所有結點的層次的最大值稱為這棵樹的深度。節點的層次:從根開始定義起,根為第1層,根的子結點為第2層,以此類推;
樹的度:一棵樹中,最大的節點的度稱為樹的度;
節點的祖先:從根到該節點所經分支上的所有節點;
子孫:以某節點為根的子樹中任一節點都稱為該節點的子孫。
森林:由m(m>=0)棵互不相交的樹的集合稱為森林;
樹的遍曆
樹的遍曆分為:前序走訪、後序遍曆、層次遍曆。前序走訪的遍曆順序是先訪問根結點,再訪問葉子結點;後序遍曆的遍曆順序是先訪問葉子結點,再訪問根結點;而層次遍曆則是按層次進行遍曆。
二叉樹
二叉樹是每個節點最多有兩個子樹的有序樹。通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹又分為滿二叉樹、完全二叉樹、非完全二叉樹等。
圖(Graph)
圖是由結點的有窮集合V和邊的集合E組成。其中,為了與樹形結構加以區別,在圖結構中常常將結點稱為頂點,邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關係。其中,圖分為無向圖和有向圖。
圖的遍曆
圖的遍曆分為深度優先遍曆和廣度優先遍曆。深度優先遍曆的思想類似於樹的先序遍曆。其遍曆過程可以描述為:某個頂點v出發,訪問該頂點,然後依次從v的未被訪問的鄰接點出發繼續深度優先遍曆圖中的其餘頂點,直至圖中所有與v有路徑相通的頂點都被訪問完為止。
廣度優先遍曆方法描述為:某個頂點v出發,在訪問該頂點v之後,依次訪問v的所有未被訪問過的鄰接點,然後再訪問每個鄰接點的鄰接點,且訪問順序應保持先被訪問的頂點其鄰接點也優先被訪問,直到圖中的所有頂點都被訪問為止。