一、學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)有什么用
數(shù)據(jù)結(jié)構(gòu)是編程最重要的基本功。學(xué)了順序表和鏈表,你就知道,在查詢操作更多的程序中,你應(yīng)該用順序表;而修改操作更多的程序中,你要使用鏈表;而單向鏈表不方便怎么辦,你這時(shí)就會(huì)想到雙向鏈表or循環(huán)鏈表。
學(xué)了棧之后,你就知道,很多涉及后入先出的問題,例如函數(shù)遞歸就是個(gè)棧模型、Android的屏幕跳轉(zhuǎn)就用到棧,很多類似的東西,你就會(huì)名列前茅時(shí)間想到:我會(huì)用這東西來去寫算法實(shí)現(xiàn)這個(gè)功能。
學(xué)了隊(duì)列之后,你就知道,對于先入先出要排隊(duì)的問題,你就要用到隊(duì)列,例如多個(gè)網(wǎng)絡(luò)下載任務(wù),我該怎么去調(diào)度它們?nèi)カ@得網(wǎng)絡(luò)資源呢?再例如操作系統(tǒng)的進(jìn)程(or線程)調(diào)度,我該怎么去分配資源(像CPU)給多個(gè)任務(wù)呢?肯定不能全部一起擁有的,資源只有一個(gè),那就要排隊(duì)!那么怎么排隊(duì)呢?用普通的隊(duì)列?但是對于那些優(yōu)先級高的線程怎么辦?那也太共產(chǎn)主義了吧,這時(shí),你就會(huì)想到了優(yōu)先隊(duì)列,優(yōu)先隊(duì)列怎么實(shí)現(xiàn)?用堆,然后你就有疑問了,堆是啥玩意?自己查吧,敲累了。
總之好好學(xué)數(shù)據(jù)結(jié)構(gòu)就對了。我覺得數(shù)據(jù)結(jié)構(gòu)就相當(dāng)于:我塞牙了,那么就要用到牙簽這“數(shù)據(jù)結(jié)構(gòu)”,當(dāng)然你用指甲也行,只不過“性能”沒那么好;我要擰螺母,肯定用扳手這個(gè)“數(shù)據(jù)結(jié)構(gòu)”,當(dāng)然你用鉗子也行,只不過也沒那么好用。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),就是為了了解以后在IT行業(yè)里搬磚需要用到什么工具,這些工具有什么利弊,應(yīng)用于什么場景。以后用的過程中,你會(huì)發(fā)現(xiàn)這些基礎(chǔ)的“工具”也存在著一些缺陷,你不滿足于此工具,此時(shí),你就開始自己在這些數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上加以改造,這就叫做自定義數(shù)據(jù)結(jié)構(gòu)。而且,你以后還會(huì)造出很多其他應(yīng)用于實(shí)際場景的數(shù)據(jù)結(jié)構(gòu)。你用這些數(shù)據(jù)結(jié)構(gòu)去造輪子,不知不覺,你成了又一個(gè)輪子哥。