數據結構_3

如下是對樹結構圖結構的概括數組

樹結構spa

樹結構與線性結構不一樣,它是非線性結構組織數據。在實際應用中,採用非線性結構來進行描述更簡單、方便。指針

樹是由n(n>=0)個結點組成的有窮集合。在任意一棵非空樹中:1.有且只有一個稱爲根的結點;2.當n>1時,其他的結點分爲m(m>0)個互不相交的有限集。樹結構在計算機中的存儲形式不少,這裏只介紹多重鏈表存儲形式。在多重鏈表中,每一個結點有一個數據域和若干個指針域,指針域的指針指向該結點的下一個孩子結點。在利用多重鏈表表示樹結構時,還分爲定結點表示和不定結點表示。排序

二叉樹(Binary Tree)使用最廣,最具備表明意義。二叉樹是一種特殊形式的樹結構,它或者爲空,或者由一個根結點加上兩棵分別稱爲左子樹和右子樹的互不相交的二叉樹組成。顯然,這個定義是遞歸形式的。二叉樹的結點包含兩個指針域,一個數據域。兩個指針域用來指向該結點的左孩子和右孩子。對二叉樹的操做歸根到底就是對結點的操做。遞歸

對於訪問二叉樹中的每個結點的這個過程,成爲二叉樹的遍歷。所謂二叉樹的遍歷,就是從一個結點出發,訪問二叉樹中全部的結點。對於二叉樹的訪問,顯然也是以遞歸的形式進行的。其中有3種方案:先序遍歷、中序遍歷、後序遍歷。先序遍歷即從根節點出發,先序遍歷左子樹,再先序遍歷右子樹。中序遍歷從樹中的某個結點開始訪問,後序遍歷則是從最後一個結點訪問(最底層子樹的結點)。這三者的遍歷都是先將左子樹訪問完後再訪問右子樹,是以遞歸的形式進行的。rem

建立二叉樹,能夠經過遍歷操做逐個生成結點,從而建立一棵二叉樹。遍歷是二叉樹最基本的操做!數學

圖結構效率

圖結構比樹結構更爲複雜,數據元素是「多對多」的關係,也就是任意兩個數據元素之間均可以存在關係。二叉樹

圖是由頂點的非空有限集合V(由N>0個頂點組成)與邊的集合E(頂點之間的關係)所構成。若圖G的每一條邊都沒有方向,則稱圖G爲無向圖;若每一條邊都有方向,則成爲有向圖。最多見的圖的存儲方法有兩種:鄰接矩陣存儲方法和鄰接表存儲方法。鄰接矩陣存儲方法也稱數組存儲方法,其核心思想是:利用兩個數組來存儲一個圖。這兩個數組,一個是一維數組,用來存放圖中的數據,一個是二維數組,用來表示圖中頂點之間的相互關係,稱爲鄰接矩陣。具體來說其中二維數組的定義,A【i】【j】定義爲,A【i】【j】={1(當頂點i,j之間有邊),0(當頂點i,j之間無邊)}。鄰接矩陣不適於存儲稀疏圖,即邊的數目不多的圖,能夠用鄰接表來存儲。鄰接表存儲方法是一種順序分配和鏈式分配相結合的存儲方法。它有鏈表和順序數組組成。鏈表用來存放邊的信息,數組用來存放頂點的數據信息。具體來說,圖中每一個頂點對應創建一個鏈表,若是有n個頂點,其鄰接表就含有n個線性鏈表。每一個鏈表前設置一個頭結點,稱爲頂點結點。頂點結點有數據域vertex和指針域next構成。搜索

(圖結構稍微複雜,暫時概括至此)


下面簡單介紹經常使用的查找和排序方法

1.順序查找,也就是將所需查找的數據一個一個地按順序地去比較查找。簡單直觀,對於被查找記錄的文件排序沒有要求,所以比較適合順序文件的查找。一樣也適合於對順序表和鏈表中的元素進行查找。缺點是平均查找長度過大,查找效率低。

2.折半查找,也就是每次將讀取的數據對半查找,又稱爲二分搜索(與數學中的二分法求近似值本質是同樣的)。它要求所查找的數據文件是有序排列的,遞增或遞減。實現形式也屬於遞歸。優勢是效率高。

3.直接插入排序。插入排序的思想是第i次排序,將序列中第i+1個元素k[i+1]插入到一個已經按值有序的子序列(k1,k2,…,ki)中合適的位置,是插入後仍然有序。

4.選擇排序。其思想是第i次排序從序列後n-i+1(i=1,2,…,n-1)個選一個最小的元素與該n-i+1個元素最前面那個元素進行位置交換。每次都將最小的往前放置。

5.冒泡排序。比較相鄰兩個數,符合要求則交換次序,不斷地將大數日後挪。可是循環比較何時終止?基本思想是每個次序都須要判斷判斷是否符合要求,可是當全部的數據 在比較過程當中若是不進行交換的話,就代表排序已經完成,所以循環到此結束便可。

6.希爾排序。又稱爲縮小增量排序。Shell's sort又稱爲Diminishing Increment Sort。由希爾在1959年提出。縮小增量即每次將序列按間隔量gap劃分,再對子序列排序。以後 再縮小gap,劃分序列,對子序列排序,如此下去,直到gap=1爲止。如何選取gap的值呢?這是比較複雜的問題,涉及了一些數學中還沒有解決的難題。可是經驗告訴咱們gap每次都去序列的通常是一種經常使用且效果很是好的方法。

7.快速排序。目前被認爲是最好的一種排序方法。其思想是:在當前的排序序列中(k1,k2,k3,……,kn)中任意選取一個元素,把該元素稱爲基準元素或支點(樞軸),把小於等    於基準元素的全部元素都移到基準元素的前面(序列的左邊),把大於基準元素的全部元素都移到基準元素的後面(序列的右邊),這樣使得基準元素所處的位置剛好就是排序的最終位置,並把當前參加排序的序列劃分爲先後兩個子序列。其中,前面的子序列中的元素都小於等於基準元素,後面的子序列的元素都大於基準元素。快速排序效率高的緣由是每次的元素移動都是跳躍性的。

8.堆排序。一種特殊形式的排序,與二叉樹有關。

相關文章
相關標籤/搜索