開篇第一章,介紹一下常見的數據結構,之后的章節介紹常見的算法解題框架
1、數組
? ? ? ? 優點:內存連續,查找效率高,為O(1)
????????缺點:內存連續,因此插入/刪除時間復雜度高,為O(n)
2、鏈表
????????優點:內存不連續,插入/刪除時間復雜度低,為O(1)
????????缺點:內存不連續,因此查找時間復雜度高,為O(n)
3、棧Stack
????????先入后出(FILO);可以通過數組/鏈表實現;兩個棧,一個入棧,一個出棧,可以模擬隊列操作。
4、隊列Queue
????????先入先出(FIFO);可以通過數組/鏈表實現;常用于消息隊列;
5、優先隊列PriorityQueue
????????先入按照優先級出(FIFO);可以通過堆Heap(Binary、Binomial、Fibonacci)/二叉搜索樹(Binary Search Tree)實現,一般不會考如何實現,現在優先隊列都納入了標準庫中,了解實現機制即可;
6、堆Heap
7、映射(Map)&集合(Set)
映射(Map)&集合(Set)一般由哈希/二叉樹實現,需要先了解HashTable & Hash Function & Hash Collisions。哈希: key經過Hash Function 處理后,O(1)的時間復雜度在HashTable(一般維數組) 找到數據所在的位置。Hash?Collisions的一種解決方式為拉鏈法:沖突后在HashTable 元素后面掛鏈表來存放位置沖突的元素。
List & 映射(Map) & 集合(Set)的區別:List 元素可重復,一般用數組/鏈表實現;?映射(Map)是key/value映射關系,一般用哈希(O(1))/樹(O(logn))實現,比數組查找效率高;集合(Set)與List 比,元素不可重復,一般用哈希(O(1))/樹(O(logn))實現,比數組查找效率高;
映射(Map)常用實現有兩種:HashMap、TreeMap,查找數據時間復雜度為O(1),但是數據是無序存放的;集合(Set)常用實現有兩種:HashSet、TreeSet,查找數據時間復雜度為O(logn),但是數據是有序存放的;
8、