數據結構和算法能起到什麼做用?java
數據結構是對在計算機內存中(有時在磁盤中)的數據的一種安排。數據結果包括數組、鏈表、棧、二叉樹、哈希表等等。算法對這些結構中的數據進行各類處理,例如,查找一條特殊的數據項或對數據進行排序。程序員
可用於下面三類狀況:算法
現實數據存儲數據庫
程序員的工具編程
建模數組
數據結構的特性:數據結構
數據結構 | 優勢 | 缺點 |
數組 | 插入快,若是知道下標,能夠很是快地存取 | 查找慢,刪除慢,大小固定 |
有序數組 | 比無序的數組查找快 | 刪除和插入慢,大小固定 |
棧 | 提供後進先出的方式存取 | 存取其餘項很慢 |
隊列 | 提供先進先出的方式存取 | 存取其餘項很慢 |
鏈表 | 插入快,刪除慢 | 查找慢 |
二叉樹 | 查找、插入、刪除都快(若是若是樹保持平衡) | 刪除算法複雜 |
紅-黑樹 | 查找、插入、刪除都快。樹老是平衡的 | 算法複雜 |
2-3-4樹 | 查找、插入、刪除都快。樹老是平衡的。相似的樹對磁盤存儲有用 | 算法複雜 |
哈希表 | 若是關鍵字已知則存取極快。插入快 | 刪除慢,若是不知道關鍵之則存取很慢,對存儲空間使用不充分 |
堆 | 插入、刪除快,對最大數據項的存取很快 | 對其餘數據項存取慢 |
圖 | 對現實世界建模 | 有些算法慢且複雜 |
上表中的數據結構除了數組以外 均可以被認爲是抽象數據結構(ADT)。數據結構和算法
算法的概述工具
對於大多數數據結構來講,都須要知道如何:大數據
插入一條新的數據項
尋找某一特定的數據項
刪除某一特定的數據項
還須要知道如何迭代地訪問某一數據機構中的各項數據項,以便進行顯示或其餘操做。
另外一種重要的算法範疇是排序,排序有許多種算法。簡單排序和高級排序 。
遞歸的概念在設計某些算法時十分重要。遞歸意味着一個方法調用它自身。
一些定義
數據庫(database)
表示在某一特定狀況下全部查閱的數據,數據庫中每一條數據都被認爲是一樣格式的。例如,若是使用索引看片來作一本地址薄,其中全部的卡片便構成了一個數據。文件這個數據有時也有表明一樣的意思。
記錄(record)
記錄時指數據庫中劃分紅的單元。
字段(field)
一條記錄常常被劃分爲幾個字段。一個字段保存某一種特定的數據。
關鍵字
在數據庫中查找一條記錄,須要制定記錄的某一個字段爲關鍵字(或查找關鍵字)。經過這個特定的關鍵字來進行查找。
面向對象編程
過程性語言的問題
一是程序與現實世界缺少對應關係。
使用過程語言對現實世界問題進行抽象及概念化十分困難:方法執行任務,而數據存儲信息,可是現實世界中的事物是對兩者同時進行操做的。例如,爐子上的自動調溫器執行任務(爐子的開關)但同時也存儲信息(如今的溫度和所但願的溫度)。
二是程序內部的結構出現了問題。
解決程序的內部組織結構是一個更微妙並且事關重大的問題。
對象簡述
對象
面向對象編程思想的關鍵性突破就是:一個對象同時包括方法和變量。
類
類是針對一個對象或多個對象的說明(或藍圖)。
建立對象
類的聲明並無建立這個類的任何對象,java使用關鍵字new。在建立對象的同時,須要將一個引用存儲到一個具體有適合的類型的變量中。
面向對象的幾個重要特性:
對象同時包括方法和字段(數據)。
類是任意數目對象的說明。
建立一個對象,要將關鍵字new和類的名稱連用。
調用一個對象的方法,要使用點運算符。
Java數據結構的類庫
Java.util包中包含有諸如向量(一個可擴充的數組)、棧、庫(dictionary)和哈希表等類型的數據結構。
小結
數據結構是指數據在計算機內存空間中或磁盤中的組織形式。
正確選擇數據結構會使程序的效率大大提升。
數據結構的例子有數組、棧、和鏈表。
算法是完成特定任務的過程。
在Java中、算法常常經過類的方法實現。
在本書的大部分數據機構和算法常常被用來建造數據庫。
一些數據結構的用途是做爲程序員的工具:它們幫助執行算法。
其餘數據結構能夠模仿顯示世界中的狀況,例如城市之間的電話線網。
數據庫是指由許多相似的記錄組成的數據存儲的集合。
一條記錄常常表示顯示世界中的一個事物,例如一名僱員或一個汽車零件。
一條記錄被分紅字段。每一個字段都存儲了 由這個記錄所描述事物的一條特性。
一個關鍵字是一條記錄中的一個字段,經過它能夠對數據執行許多操做。例如,人事記錄能夠經過LastName字段進行排序。
能夠搜索數據以便找到關鍵字字段有定值的全部記錄,這個值被稱爲查找關鍵字。