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