常用的數據結構

人們常說數據結構,面試的時候也常被問道數據結構相關的問題,到底什麼是數據結構?

      數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技術有關。

      數據結構在計算機中的表示(映像)稱爲數據的物理(存儲)結構。它包括數據元素的表示和關係的表示。數據元素之間的關係有兩種不同的表示方法:順序映象和非順序映象,並由此得到兩種不同的存儲結構:順序存儲結構和鏈式存儲結構。順序存儲方法:它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元裏,結點間的邏輯關係由存儲單元的鄰接關係來體現,由此得到的存儲表示稱爲順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常藉助於程序設計語言中的數組來實現。鏈接存儲方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關係是由附加的指針字段表示的。由此得到的存儲表示稱爲鏈式存儲結構,鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。索引存儲方法:除建立存儲結點信息外,還建立附加的索引表來標識結點的地址。散列存儲方法:就是根據結點的關鍵字直接計算出該結點的存儲地址。

      數據結構中,邏輯上(邏輯結構:數據元素之間的邏輯關係)可以把數據結構分成線性結構和非線性結構。線性結構的順序存儲結構是一種隨機存取的存儲結構,線性表的鏈式存儲結構是一種順序存取的存儲結構。線性表若採用鏈式存儲表示時所有結點之間的存儲單元地址可連續可不連續。邏輯結構與數據元素本身的形式、內容、相對位置、所含結點個數都無關。

數組 (Array)

  在程序設計中,爲了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數據元素的集合稱爲數組。在C語言中, 數組屬於構造數據類型。一個數組可以分解爲多個數組元素,這些數組元素可以是基本數據類型或是構造類型。因此按數組元素的類型不同,數組又可分爲數值數組、字符數組、指針數組、結構數組等各種類別。

(Stack)

  是只能在某一端插入和刪除的特殊線性表。它按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。

隊列 (Queue)

  一種特殊的線性表,它只允許在表的前端進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱爲隊尾,進行刪除操作的端稱爲隊頭。隊列中沒有元素時,稱爲空隊列。

鏈表 (Linked List)

  是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱爲結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。

(Tree)

  是包含n(n>0)個結點的有窮集合K,且在K中定義了一個關係N,N滿足 以下條件:

  (1)有且僅有一個結點 k0,他對於關係N來說沒有前驅,稱K0爲樹的根結點。簡稱爲根(root)。 

      (2)除K0外,k中的每個結點,對於關係N來說有且僅有一個前驅。

  (3)K中各結點,對關係N來說可以有m個後繼(m>=0)。

(Heap)

  在計算機科學中,堆是一種特殊的樹形數據結構,每個結點都有一個值。通常我們所說的堆的數據結構,是指二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。

散列表 (Hash)

  若結構中存在關鍵字和K相等的記錄,則必定在f(K)的存儲位置上。由此,不需比較便可直接取得所查記錄。稱這個對應關係f爲散列函數(Hash function),按這個思想建立的表爲散列表。

(Graph)

  圖是由結點的有窮集合V和邊的集合E組成。其中,爲了與樹形結構加以區別,在圖結構中常常將結點稱爲頂點,邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關係。

本文轉自:http://www.wangshangyou.com/?post=73

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章