幾大重要的數據結構:數組(線性表)、鏈表、hash表
分別對應了python中的list、deque、dict、set,但其內部實現原理比C的要復雜不少,也有很多好用的接口
list
python中的list要滿足以下要求:
是數組類型,以索引就可以直接取到元素,O(1)取元素
元素可以是任意類型
可以任意添加新元素,容易擴充
基於以上要求,list的實現設計為:
1. 元素外置,每個元素只存儲index
2. 分離式結構,表內元素和表頭信息不在一起
3. 動態擴充
在python中創建空list時,會申請一個8個元素大小的內存區域。以后如果滿了,就擴容4倍,不斷反復,直至當元素總數達到50000時,再擴容就改為2倍
各操作時間復雜度:
參考:
https://www.cnblogs.com/yifeixu/p/8893823.html 順序表的原理與python中的list類型
https://wiki.python.org/moin/TimeComplexity
deque
各操作時間復雜度:
dict
各操作時間復雜度:
set
各操作時間復雜度:
判斷值是否存在,千萬不要用list,list查找的復雜度為O(n),而set和dict由於用hash實現,查找的復雜度為O(1)
(待更新)
參考:
https://www.cnblogs.com/tianyiliang/p/10330878.html
https://www.cnblogs.com/linshuhui/p/9580620.html
https://blog.csdn.net/u010366748/article/details/51469937 (Python內置方法的時間復雜度)