說明:以下內容中的書是指《數據結構與算法(JAVA語言版)》周鵬版,部分內容已經按照搜索引擎的內容修改過。
在數據結構的實現中我們可以很好的將數據結構中的一些基本概念和 Java 語言中的一些概念對應起來。
數據元素可以對應到類,其數據項就是類的成員變量,某個具體的數據元素就是某個類的一個實例;數據的順序存儲結構與鏈式存儲結構可以通過一維數組以及對象的引用來實現;抽象數據類型也可以對應到類,抽象數據類型的數據對象與數據之間的關系可以通過類的成員變量來存儲和表示,抽象數據類型的操作則使用類的方法來實現。
數據結構分為:邏輯結構、存儲結構。
邏輯結構分為:集合、線性結構、樹形結構、圖形結構。
--線性表、棧、隊列、樹、圖等邏輯結構。
--其中線性表、棧、隊列為線性結構,樹和圖都是非線性結構。
邏輯結構可以采用兩種方法來描述:二元組、圖形。
--二元組表示形式: DS = ( D, S ) 【Data Structure】
--其中 D 是數據元素的集合; S 是 D 中數據元素之間的關系集合,並且數據元素之間的關系是使用序偶來表示的。序偶是由兩個元素 x 和 y 按一定順序排列而成的二元組,記作<x , y>, x 是它的第一元素, y 是它的第二元素。
--當使用圖形來表示數據結構時,是用圖形中的點來表示數據元素,用圖形中的弧來表示數據元素之間的關系。如果數據元素 x 與 y 之間有關系<x , y>,則在圖形中有從表示 x 的點出發到達表示 y 的點的一條弧。
現在,另數據結構的二元組形式為:DS = (D, S),則:
- 如果 D != null,而S == null,則該數據結構為集合結構。
- 如果 D = {01, 02, 03, 04, 05},S = {<02,04>, <03,05>, <05,02>, <01,03>},則該數據結構是線性結構。
在這些數據元素中有一個可以被稱為“第一個”的數據元素;還有一個可以被稱為“最后一個”的數據元素;除第一個元素以外每個數據元素有且僅有一個直接前驅元素,除最后一個元素以外每個數據元素有且僅有一個直接后續元素。這種數據結構的特點是數據元素之間是 1對 1 的聯系,即線性關系。 - D = {01, 02, 03, 04, 05, 06}
S = {<01,02>, <01,03>, <02,04>, <02,05>, <03,06>}
除了一個數據元素(元素 01)以外每個數據元素有且僅有一個直接前驅元素,但是可以有多個直接后續元素。這種數據結構的特點是數據元素之間是 1 對 N 的聯系,即樹結構。 - D = {01, 02, 03, 04, 05}
S = {<01,02>, <01,05>, <02,01>, <02,03>, <02,04>, <03,02>,<04,02>, <04,05>, <05,01>, <05,04>}:
每個數據元素可以有多個直接前驅元素,也可以有多個直接后續元素。這種數據結構的特點是數據元素之間是 M 對 N 的聯系,即圖結構。
存儲結構分為:順序存儲結構、鏈式存儲結構。
算法( algorithm) 是指令的集合,是為解決特定問題而規定的一系列操作。
在計算機資源中,最重要的就是時間與空間。評價一個算法性能的好壞,實際上就是評價算法的資源占用問題。
算法運行時間的確定問題,這個問題被稱之為算法的時間復雜性;算法的空間復雜性是由算法運行時使用的空間來評價的。但算法的空間復雜性是以時間復雜性為上界的!
一般來說,不存在固定的方法,使用它就可以得到一個算法的時間復雜度。但是在分析算法的時間復雜度時有一些常用技術是可以使用的。
計算循環次數、分析最高頻度的基本操作、最佳最壞及平均情況分析、均攤分析。