數據類型和常用數據結構

1.數據類型

幾乎是所有的程序設計語言都會講到數據類型的概念。簡單的說,數據類型就是一個值的集合及在這些值上定義的一系列操作的總稱。例如:對於C語言的整數類型,其有一定的取值範圍,對於整數類型還定義了加法、減法、乘法、除法和取模運算等操作。

按照數據類型的值是否可以分解,數據類型可以分爲基本數據類型和聚合數據類型。

*基本數據類型:其值不能進一步分解,一般是程序設計語言自身定義的一些數據類型,例如C語言中、字符型、浮點型等。

*聚合數據類型:其值可以進一步分解爲若干分量,一般是用戶自定義的數據類型,例如C語言中的結構、數組等。

上述數據類型的概念在一般的程序設計語言中都會講到。在這裏將重點看一下另外一個概念,抽象數據類型(Abstract Type,簡稱ADT)。

抽象數據類型ADT指的的是數據的組織及其相關的操作。ADT可以看作數據的邏輯結構及其在邏輯結構上定義的操作。一個抽象數據類型ADT可以定義爲如下形式:

ADT抽象數據類型名

數據對象:(數據元素集合)

數據關係:(數據關係二元組結合)

基本操作:(操作函數的羅列)

}ADT抽象數據類型

抽象數據類型ADT一般具有如下兩個重要特徵。

*數據抽象:使用抽象數據類型ADT時,其強調的是實體的本質特徵,所能夠完成的功能,以及與外部用戶的接口。

*數據封裝:用於將實體的外部特性和其內部實現細節進行分離,並且對外部用戶隱藏其內部實現細節。

抽象數據類型ADT可以看作描述問題的模型,它獨立於具體實現。ADT的優點是將數據和操作封裝在一起,使得用戶程序只能通過在ADT裏定義的某些操作來訪問其中的數據,從而實現了信息隱藏。在java語言中是使用接口來表示抽象數據類型ADT,用接口的實現類來實現ADT的。

抽象數據類型ADT和接口的概念其實很好的表現了程序設計中的兩層抽象。抽象數據類型ADT是概念層上的抽象,而接口則屬於實現層上的抽象。

2.常用的數據結構

在計算機科學的發展過程中,數據結構也在隨着發展。目前,程序設計中常用的數據結構包括如下內容:

1)數組(Array)

數組是一種聚合數據類型,是將具有相同類型的若干變量有序的組織在一起的集合。數組可以說是最基本的數據結構,在各種的編程語言中都有對應。一個數組可以分解成多個數組元素,按照數據元素的類型,數組可以分爲整數數組、字符型數組、浮點型數組、對象數組等。數組還可以有一維、二維及多維等表現形式。

2)棧(Stack)

棧是一種特殊的線性表,其只能在一個表的固定端進行數據結點的插入和刪除操作。棧按照後進先出的原則來存儲數據,也就是說,先插入的數據將被壓入棧底,最後插入的數據在棧頂,讀出數據時,從棧頂逐個開始讀出。棧在彙編語言程序中經常用於重要數據的現場保護。棧中沒有數據時,稱爲空棧。

3)隊列(Queue)

隊列和棧類似,也是一種特殊的線性表。和棧不同的是,隊列只允許在表的一端進行插入操作,而在另一端進行刪除操作。一般來說,進行插入操作的一段稱作爲隊尾,進行刪除操作的一端稱作爲隊頭。隊列中沒有元素時,稱爲空隊列。

4)鏈表(Linked List)

鏈表是一種數據元素按照鏈式存儲結構進行存儲的數據結構,這種存儲結構在物理上具有非連續的特點。鏈表由一系列數據結點構成,每個數據結點包括數據域和引用域兩部分。其中,引用域保存了數據結構中下一個元素存放的地址。鏈表結構中數據元素的邏輯順序是通過鏈表中的引用域按次序來實現的。

5)樹(Tree)

樹是典型的非線性結構,其是包括N個結點的有窮集合K。在樹結構中,有且僅有一個根節點,該結點沒有前驅結點。在樹結構中的其他結點都有且僅有一個前驅結點,而且可以有M個後繼結點,M>=0.

6)圖(Graph)

圖是另外一種非線性數據結構。在圖結構中,數據結點一般稱爲頂點,而邊是頂點的有序偶對。如果兩個定點之間存在一條邊,那麼就表示這兩個頂點具有相鄰關係。

7)堆(Heap)

堆是一種特殊的樹型數據結構,一般討論的堆都是二叉堆。堆的特點是其根據結點的值是所有結點中最小的或者最大的,並且根據點的兩個子樹也是一個堆結構。

8)散列表(Hash)

散列表源自於散列函數(Hash funtcion),其思想是如果在結構中存在關鍵字和T相等的記錄,那麼必定在F(T)的存儲位置可以找到該記錄,這樣就可以不用進行比較而直接去的所查記錄。

3.選擇合適的數據結構解決實際問題

計算機給程序員帶來了很大的方便。計算機能夠處理的問題一般可以分爲兩類:數值計算問題和飛數值計算問題。

數值計算問題在早期的計算機發展中佔據了很大的比例。例如,線性方程求解、矩陣的計算等。這類問題一般需要程序設計的技巧和相應的數學知識,而數據結構方面涉及的內容比較少。

隨着計算機應用範圍的礦大,一些非數值計算問題越來越突出,稱爲計算機解決的焦點問題。目前來說,非數值計算問題大約佔據了80%的計算機工作時間。高效解決這類問題不僅需要需要數學知識,而且還需要設計合理的數據結構。例如,在一個包含大量數據的電話號碼簿中查找指定號碼的問題,運動比賽的賽程時間安排問題等。這些問題都需要往往不能簡單的用數學公式來表示,還需要合理的選擇數據結構來處理。


歡迎大家加入技術學習羣:364595326


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