常用的數據結構與算法一
數據結構:數據之間相互存在的一種或者多種特定關係的元素的集合
1 數據之間的邏輯結構 : 集合結構;線性結構;樹形結構;圖形結構
物理結構【存儲結構】:順序存儲結構; 鏈式存儲結構
一 常用的數據結構有:
數組,字符串【array String】
鏈表【linked-list】
棧【Stack】
隊列 【Queue】
雙端隊列【deque】
樹【tree】
數組優缺點:
優點: 1 構建數組簡單
2 查找速度快 能讓我們在O(1)的時間裏根據數組的下標index查詢某個元素
缺點: 1 構建數組必須分配一段連續的空間
2 判斷某個元素是否存在需要遍歷整個數組,耗費O(n)的時間(n是元素的個數)
3 刪除個添加某個元素時 同樣耗費O(n)的時間
鏈表的組成結構:https://blog.csdn.net/xuwb123xuwb/article/details/105435213
鏈表通常由一連串節點組成,每個節點包含該節點的數據和指向上一節點或者下一節點的引用
單鏈表和雙鏈表
單鏈表:鏈表中的每個元素實際上是一個單獨的對象,而所有對象都通過每個元素中的引用字段鏈接在一起。
雙鏈表:與單鏈表不同的是,雙鏈表的每個節點中都含有兩個引用的字段
鏈表的優缺點:
優點:1 鏈表能靈活的分配內存空間
2 能在O(1)時間內刪除或者添加元素,前提是該元素的前一個元素已知,當然也取決於是單鏈表還是雙鏈表,在雙鏈表中如果已知該元素的後一個元素,同樣可以在O(1)時間內刪除或者添加該元素
缺點:1不像數組能通過下標迅速讀取元素,每次都要從鏈頭開始一個一個讀取
2 查詢第K個元素需要O(k)時間
應用場景:如果要解決的問題裏邊需要很多快速查詢,鏈表可能並不合適;如果遇到的問題中,數據的元素個數不確定,而且需要經常進行數據的添加和刪除,那麼鏈表會比較合適。而如果數據元素大小確定,刪除插入的操作並不多,那麼數組可能更合適。