大家好炫乓,我是朱光翼娄徊,今天是JS學(xué)習(xí)的第三天辅肾,我在北京珠峰學(xué)習(xí)的第三天(打個(gè)廣告绪杏,大家見(jiàn)諒)。今天我們學(xué)習(xí)了很多數(shù)據(jù)類型击蹲,以及他們?cè)贘S底層運(yùn)行的方式署拟。
不知道有沒(méi)有朋友和我一樣,多年中一直覺(jué)得數(shù)據(jù)類型就是數(shù)據(jù)結(jié)構(gòu)歌豺。(大家不要笑推穷,我真的是這么以為的)。但其實(shí)不是的类咧,JS中有很多數(shù)據(jù)類型:類似與Number/boolean/null/undefinal/String/symbol/等等馒铃,這些類型是如何產(chǎn)生的蟹腾,這個(gè)問(wèn)題我還沒(méi)有去研究,但是我發(fā)現(xiàn)了數(shù)據(jù)結(jié)構(gòu)這個(gè)東西区宇,并且并不難娃殖,所以今天和大家分享一下,希望對(duì)大家的學(xué)習(xí)有所幫助议谷。
什么是數(shù)據(jù)結(jié)構(gòu)那炉爆?
程序的目的主要是用一些邏輯語(yǔ)句去控制一些數(shù)據(jù),然后達(dá)到某種目的卧晓,比方說(shuō)經(jīng)典的排序問(wèn)題芬首,就是不停的“搬運(yùn)”數(shù)據(jù)。數(shù)據(jù)的擺放方式禀崖,決定了搬運(yùn)的效率衩辟,好的數(shù)據(jù)擺放螟炫,更容易讓邏輯語(yǔ)句達(dá)到目的波附。那么數(shù)據(jù)結(jié)構(gòu)代表了數(shù)據(jù)是如何擺放的,如何相互關(guān)聯(lián)的昼钻,如何去取用存放的掸屡。邏輯語(yǔ)句根據(jù)不同的數(shù)據(jù)結(jié)構(gòu)特點(diǎn),進(jìn)行最合理的操作然评,來(lái)達(dá)到目的仅财,實(shí)現(xiàn)程序功能。
那么數(shù)據(jù)結(jié)構(gòu)總共分為幾類那碗淌?
在我閱讀的書(shū)籍中盏求,一共給數(shù)據(jù)分為四種結(jié)構(gòu),我相信后來(lái)的科技發(fā)展會(huì)有其他的數(shù)據(jù)結(jié)構(gòu)類型亿眠,各位朋友可以在留言板中補(bǔ)充碎罚,謝謝。
注:這里還是要提醒大家纳像,所寫(xiě)內(nèi)容比較淺顯荆烈,且并不權(quán)威,只討論原理竟趾,并不能作為應(yīng)用標(biāo)準(zhǔn)
? ? ? ? 1憔购、棧(Stack):本意是干草堆,有點(diǎn)像我們會(huì)把一些東西堆在一起岔帽,比方說(shuō)把衣服堆高玫鸟,它的特點(diǎn)就是,如果我去拿衣服犀勒,最好是從上往下一件一件拿鞋邑。? ? 這與我們放衣服的順序是相反的诵次,在書(shū)中有一個(gè)縮寫(xiě)叫做FILO(first in last out)先進(jìn)后出,所以這個(gè)棧是一個(gè)線性的枚碗,不是那么靈活逾一。
? ? ? ? 2、隊(duì)列(Queue):像是在排隊(duì)肮雨,與棧不同的是隊(duì)列是先進(jìn)后出遵堵,即FIFO(first in first out),同樣是線性的存儲(chǔ)關(guān)系怨规,那有什么不同那陌宿?在棧內(nèi)存中,我們拿出一個(gè)東西和放入一個(gè)東西波丰,只和我們最后操作的內(nèi)容有關(guān)系壳坪,棧其余的內(nèi)容都沒(méi)有受到影響。但是隊(duì)列不一樣掰烟,由于先進(jìn)后出的關(guān)系爽蝴,我們隊(duì)列最前面的人出去以后,隊(duì)列后面的人會(huì)跟上纫骑,這樣原來(lái)的第二位蝎亚,變成了第一位,也就是說(shuō)后面的地址前移了先馆。
? ? ? ? 3发框、鏈表,鏈表本身也是一個(gè)線性的關(guān)系煤墙,但鏈表與前兩者的不同是梅惯,在鏈表中的每個(gè)元素,末尾都有一個(gè)地址仿野,如果這個(gè)地址直接指向下一個(gè)元素铣减,那么這與棧和隊(duì)列就沒(méi)有什么區(qū)別了,但是如果我們操作這個(gè)地址來(lái)改變它设预,我們可以讓地址鏈接任何一個(gè)元素徙歼,這就變得很靈活,在程序中我們程序員通常會(huì)開(kāi)辟一個(gè)空間鳖枕,這個(gè)空間要做指定的事情魄梯,為了靈活我們會(huì)選用鏈表形式的數(shù)據(jù)結(jié)構(gòu)。
? ? ? ? 4宾符、二叉樹(shù):二叉樹(shù)與鏈表比較相似酿秸,不同的是二叉樹(shù)的每一個(gè)元素結(jié)尾有兩個(gè)地址,也就是可以指向兩個(gè)元素魏烫,這樣做有什么好處那辣苏?應(yīng)該來(lái)說(shuō)肝箱,我們?cè)谒阉鞯臅r(shí)候效率更高,在某一個(gè)分叉上尋找內(nèi)容稀蟋,而不需要遍歷所有的數(shù)據(jù)煌张。
以上就是數(shù)據(jù)結(jié)構(gòu)中我所查詢到的內(nèi)容,都是計(jì)算機(jī)底層的存儲(chǔ)機(jī)制退客,希望對(duì)你有幫助骏融。
這里有一個(gè)小小的收獲,在JS的學(xué)習(xí)中萌狂,我們老師講解到JS中棧內(nèi)存負(fù)責(zé)存儲(chǔ)變量名档玻、基本數(shù)據(jù)類型,完成JS代碼的運(yùn)行茫藏。當(dāng)遇到數(shù)組误趴、函數(shù)、對(duì)象時(shí)會(huì)用堆來(lái)存儲(chǔ)务傲。我們會(huì)看到上面沒(méi)有堆這種數(shù)據(jù)結(jié)構(gòu)凉当,于是通過(guò)上網(wǎng)查詢,我找到堆的相關(guān)信息树灶,發(fā)現(xiàn)里面也大有文章纤怒,我這里不做贅述糯而,大家可以點(diǎn)擊這個(gè)鏈接觀看堆和棧的解釋和區(qū)別天通。