數組
概念與特性 | 1,數組是線性表,用一組連續的內存空間存儲?組具有相同類型的數據 2,最大的特性是?持按照下標O(1)時間復雜度內快速訪問數組元素 3,?維數組尋址公式:a[i]_addr = base_addr + i * data_type_size |
操作與復雜度 | 1. 隨機訪問時間復雜度是O(1); 3. 刪除數組中任意位置數據的時間復雜度是O(n) |
應?場景 | 數組是其他數據結構和算法的實現基礎,?如棧、隊列、堆、?分查找等 |
其他知識點 | 1. 數組需要連續的內存空間,對內存的要求較?; 2. 數組中的數據連續存儲,對CPU緩存友好; 3. ?部分編程語?中,數組下標都是從0開始編號; 4. ?部分編程語?中,都提供了容器類型以?持動態數組(動態擴容); 5. 編程語?中的數組類型并不等同于數據結構中講的數組; |
掌握程度 | 能夠??動?實現?個動態數組類 |
鏈表
概念與特性 | 1. 鏈表是線性表,不需要連續的內存空間來存儲元素,通過指針將串聯每個鏈表中的結點; 2. 常?的鏈表結構有:單鏈表、雙向鏈表、循環鏈表,其中雙向鏈表因為?持在O(1)時間復雜度內找到前驅結點,在實際開發中最常?; |
操作與復雜度 | 1. 與數組對?,查找第i個元素的時間復雜度是O(n); 2. 在已知前驅結點的情況下,單鏈表中插?數據的時間復雜度是O(1); |
應?場景 | 鏈表是其他數據結構和算法的實現基礎,?如跳表、散列表等 |
其他知識點 | 1. 鏈表中的數據不連續存儲,對CPU緩存不友好; 2. 在實際的編程中,可定義有頭鏈表,也可以定義?頭鏈表;有頭鏈表指的是鏈表中的頭結點不存儲數據; |
掌握程度 | 1. 熟練實現單鏈表、雙向鏈表、循環鏈表的定義和操作 2. 熟練實現經典的鏈表題?,?如反轉鏈表、鏈表求中間結點、合并有序鏈表、刪除鏈表倒數第K個結點等; |
棧
概念與特性 | 1. 棧是?種操作受限的線性表,只能在?端插?刪除數據; 2. 棧的最?特性是先進后出; |
操作與復雜度 | 1. ?棧操作,在棧頂放?數據,時間復雜度是O(1); 2. 出棧操作,從棧頂取出數據,時間復雜度是O(1); |
應?場景 | 1. 函數調?棧; 2. 編譯器利?棧來實現表達式求值; 3. 瀏覽器中的前進后退功能的實現也會?到棧; |
其他知識點 | 1. 棧既可以?數組來實現,也可以?鏈表來實現; 2. 基于數組實現的?持動態擴容的棧的插?操作的均攤時間復雜度是O(1); |
掌握程度 | 1. 熟練利?數組實現?個棧; 2. 熟練利?鏈表實現?個棧; 3. 掌握基于數組實現的?持動態擴容的棧的插?操作的時間復雜度分析; 4. ?棧檢查括號是否匹配,?如:{[()]()[{}]}或[{()}([])]等都為合法格式,?{[}()]或[({)]為不合法的格式; |
隊列
概念與特性 | 1. 隊列是?種操作受限的線性表,只能在兩端插?、刪除數據; 2. 隊列的最?特性是先進先出; ? |
操作與復雜度 | 1. ?隊操作,在隊尾插?數據,時間復雜度是O(1); 2. 出隊操作,從隊頭取出數據,時間復雜度是O(1); |
應?場景 | 隊列常?在有限資源池中,?于排隊請求,?如數據庫連接池等; |
其他知識點 | 1. 隊列既可以?數組來實現,也可以?鏈表來實現; 2. 最常使?的隊列是基于數組實現的循環隊列; |
掌握程度 | 熟練實現?個循環隊列,重點是掌握隊列的判空和判滿條件; |