『壹』 八種數據結構特點
數據結構:計算機存儲、組織數據的方式。程序員的目標是為當前的問題選擇最優的數據結構。
八種數據結構:數組,棧,鏈表,隊列,堆,圖,樹,散列表,每種數據結構都有其特殊的存儲方式。
概念:
一維數組:數組元素+數組索引
多維數組:數組的元素也是數組
基本操作:insert,get,delete(刪除某個索引處的數組),size(獲取數組長度)
題目:
查找數組第二小的元素
查找第一個沒有重復的數組元素
合並2個排序號的數據
重新排列數組中的正數和負數
特點:棧是一種特殊的線性表,僅能在線性表的一端操作,棧頂允許操作,棧底不允許操作。 棧的特點是:先進後出,或者說是後進先出。棧中的元素採用LIFO (Last In First Out),即後進先出。
基本操作:Push(棧頂插入元素),Pop(返回棧最上方的元素,並刪除),isEmpty(查詢棧是否為空),Top(返回最上方元素,並不刪除)
題目:使用棧計算後綴表達式、使用棧為棧中的元素排序、檢查字元串中的括弧是否匹配正確
使用場景:棧常應用於實現遞歸功能方面的場景,例如斐波那契數列。撤回,即Ctrl+Z,是我們最常見的操作之一,大多數應用都會支持這個功能。你知道它是怎麼實現的嗎?答案是這樣的:把之前的應用狀態(限制個數)保存到內存中,最近的狀態放到第一個。這時,我們需要棧(stack)來實現這個功能。
概念:隊列(Queue)與棧類似,都是採用線性結構存儲數據。它們的區別在於,棧採用LIFO方式,而隊列採用先進先出,即FIFO(First in First Out)。
使用場景:因為隊列先進先出的特點,在多線程阻塞隊列管理中非常適用。
基本操作:Enqueue—在隊列末尾插入元素,Dequeue—將隊列第一個元素刪除i,sEmpty—查詢隊列是否為空,Top—返回隊列的第一個元素
習題:使用隊列實現棧,倒轉隊列的前K個元素,使用隊列將1到n轉換為二進制。
概念「鏈表(Linked List)也是線性結構,它與數組看起來非常像,但是它們的內存分配方式、內部結構和插入刪除操作方式都不一樣。鏈表是一系列節點組成的鏈,每一個節點保存了數據以及指向下一個節點的指針。鏈表頭指針指向第一個節點,如果鏈表為空,則頭指針為空或者為null。鏈表分為:單向鏈表,雙向鏈表。
使用場景:鏈表可以用來實現文件系統、哈希表和鄰接表。
基本操作:InsertAtEnd—在鏈表結尾插入元素,InsertAtHead—在鏈表開頭插入元素,Delete—刪除鏈表的指定元素,DeleteAtHead—刪除鏈表第一個元素,Search—在鏈表中查詢指定元素,isEmpty—查詢鏈表是否為空
題目:倒轉1個鏈表,檢查鏈表中是否存在循環,返回鏈表倒數第N個元素,移除鏈表中的重復元素
概念:圖(graph)由多個節點(vertex)構成,節點之間闊以互相連接組成一個網路。(x, y)表示一條邊(edge),它表示節點x與y相連。邊可能會有權值(weight/cost)。
分類:無向圖,有向圖
表現形式:鄰接矩陣(Adjacency Matrix),鄰接表(Adjacency List)
遍歷圖的兩種演算法:廣度優先搜索(Breadth First Search),深度優先搜索(Depth First Search)
常見題目:
實現廣度優先搜索,實現深度優先搜索,檢查圖是否為樹,統計圖中邊的個數,使用Dijkstra演算法查找兩個節點之間的最短距離。
樹(Tree)是一個分層的數據結構,由節點和連接節點的邊組成。樹是一種特殊的圖,它與圖最大的區別是沒有循環。樹被廣泛應用在人工智慧和一些復雜演算法中,用來提供高效的存儲結構。
常見樹:N叉樹(N-ary Tree),平衡樹(Balanced Tree),二叉樹(Binary Tree),二叉查找樹(Binary Search Tree),平衡二叉樹(AVL Tree),紅黑樹(Red Black Tree),2-3樹(2–3 Tree)
題目:計算樹的高度,查找二叉平衡樹中第K大的元素,查找樹中與根節點距離為k的節點,查找二叉樹中某個節點所有祖先節點。
哈希(Hash)將某個對象變換為唯一標識符,該標識符通常用一個短的隨機字母和數字組成的字元串來代表。哈希可以用來實現各種數據結構,其中最常用的就是哈希表(hash table)。
哈希表通常由數組實現。
哈希表的性能取決於3個指標:
哈希函數哈希表的大小哈希沖突處理方式
題目:查找數組中對稱的組合,確認某個數組的元素是否為另一個數組元素的子集,確認給定的數組是否互斥。
前綴樹(Prefix Trees或者Trie) 與樹類似,用於處理字元串相關的問題時非常高效。它可以實現快速檢索,常用於字典中的單詞查詢,搜索引擎的自動補全甚至IP路由。
參考資料: http://www.cnblogs.com/williamjie/p/9558015.html