下面我們通過一個問題來簡單介紹數(shù)據(jù)結(jié)構(gòu)
問題:用Python來保存一個班級的學(xué)生信息,要求有一下內(nèi)容,name , age, hometown。
1、用列表實現(xiàn):
[
("zhangsan", 24, "beijing")
("lisi", 24, "beijing")
("wangwu", 24, "beijing")
]
如果想取出張三的時候是:
for stu in stus:
if stu(0) == "zhangsan"
需要遍歷每一個列表中的值,這樣的時間復(fù)雜度是O(n)。
2、用散列表,在Python中就是字典來存儲
{
'zhangsan':{'age':24, 'hometown':'beijings'},
'lisi':{'age':24, 'hometown':'beijings'},
'wangwu':{'age':24, 'hometown':'beijings'}
}
這時我們?nèi)〕銎渲械膹埲?br>
stus['zhangsan']
可以直接通過鍵取出對應(yīng)的值,時間復(fù)雜度為O(1)。
所以,存儲同樣的數(shù)據(jù),使用列表和字典會對你訪問數(shù)據(jù)時候的便捷度產(chǎn)生了不同的結(jié)果。
簡單介紹內(nèi)存知識
內(nèi)存: 真正存儲數(shù)據(jù)并跟CPU打交道的地方
內(nèi)存是一個連續(xù)的存儲空間,就像進出超市時候的儲物柜,你存?zhèn)€東西,會給你一個小票,這個小票就是尋找你這個儲物柜的地址,你通過這個地址來訪問這個儲物柜。
比如:
| 0x03 | 0x04 | 0x05 |
| 0x06 | 0x07 | 0x08 |
| 0x09 | 0x10 | 0x11 |
當然,現(xiàn)實中的內(nèi)存地址比這個長的多。
總結(jié):
算法是解決問題的思路, 數(shù)據(jù)結(jié)構(gòu)是解決的數(shù)據(jù)是以什么樣的方式存在的。
程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法