數據結構包括數組、鏈表、棧、二叉樹、哈希表等等html
數據結構 | 優勢 | 缺點 | |
數組 | 插入快 | 查找慢、刪除慢、大小固定 | |
有序數組 | 查找快 | 插入慢、刪除慢、大小固定 | |
棧 | 後進先出 | 存取其餘項很慢 | |
隊列 | 先進先出 | 存取其餘項很慢 | |
鏈表 | 插入、刪除快 | 查找慢 | |
二叉樹 | 查找、插入、刪除快 | 算法複雜(刪除算法) | |
紅黑樹 | 查找、插入、刪除快 | 算法複雜 | |
hash表 | 存取極快(已知關鍵字)、插入快 | 刪除慢、不知關鍵字時存取很慢、對存儲空間使用不充分 | |
堆 | 插入快、刪除快、對大數據項存取快 | 對其餘數據項存取慢 | |
圖 | 依據現實世界建模 | 算法有些複雜 | |
AVL樹 | 查找、插入、刪除快 | 算法複雜 |
總結:算法
通用數據結構:數組,鏈表,樹,哈希表數據庫
它們被稱之爲通用的數據結構是由於它們經過關鍵字的值來存儲並查找數據,這一點在通用數據庫程序中常見到(棧等特殊結構正好相反,它們只容許存取必定的數據項)。數組
通用數據結構能夠徹底按照速度的快慢來分類:數組和鏈表是最慢的,樹相對較快,哈希表是最快的。數據結構
但並非使用最快的結構永遠是最好的方案。這些最快的結構也有缺陷,首先,它們的程序在不一樣程度上比數組和鏈表的複雜;其次,哈希表要求預先知道要存儲多少數據,數據對存儲空間的利用率也不是很是高。普通的二叉樹對順序的數據來講,會變成緩慢的O(N)級操做;而平衡樹雖然避免了上述的問題,可是它的程序編制起來卻比較困難。post
數組在下列狀況下頗有用:1數據量較小 2數據量的大小事先可預測 3若是存儲空間足夠大的話,能夠放鬆第二條,建立一個足夠大的數組來應付全部能夠預見的數據輸入。大數據
若是插入速度很重要的話,使用無序數組。若是查找速度很重要的話,使用有序數組,並用二分查找。數組元素的刪除老是很慢,這是因爲爲了填充空出來的單元,平均半數以上的數組元素要被移動。在有序數組中的遍歷是很快的,而在無序的數組不支持這種功能。spa
若是須要存儲的數據量不能預知或者須要頻繁地插入刪除數據元素時,考慮使用鏈表。當有新的元素加入時,鏈表就開闢新的所須要的空間,因此它甚至能夠佔滿所有可用內存;在刪除過程當中沒有必要像數組那樣添補「空洞」。.net