學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)有什么用?

作為一個普院的學(xué)生,很多人都告誡我說數(shù)據(jù)結(jié)構(gòu)很重要,很重要,要好好學(xué),所以學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)到底有什么用?
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),從我的觀點來看并不僅僅是學(xué)習(xí)其中現(xiàn)成的那些隊列,堆棧,二叉樹,圖等經(jīng)典結(jié)構(gòu), 也不僅僅是學(xué)習(xí)其中的那些快速排序、冒泡排序等算法。更重要的是你要學(xué)習(xí)一種思想:如何把現(xiàn)實問題轉(zhuǎn)化為計算機(jī)語言的表示。計算機(jī)只是一個機(jī)器,只會按照預(yù)定的指令一步步執(zhí)行, 而計算機(jī)語言的特點就是精確、無二意, 它的本質(zhì)語言是二進(jìn)制的, 即使是Java的語言也只不過是包裝而已, 它的表達(dá)能力并沒有本質(zhì)的提升, 仍然停留在很低的層次。
其次,從學(xué)習(xí)層面來看。學(xué)了順序表和鏈表,你就知道,在查詢操作更多的程序中,你應(yīng)該用順序表;而修改操作更多的程序中,你要使用鏈表;而單向鏈表不方便怎么辦,每次都從頭到尾好麻煩啊,怎么辦?你這時就會想到雙向鏈表或者循環(huán)鏈表。學(xué)了棧之后,你就知道,很多涉及后入先出的問題,類似的東西,你就會第一時間想到:我會用這東西來去寫算法實現(xiàn)這個功能。學(xué)了隊列之后,你就知道,對于先入先出要排隊的問題,你就要用到隊列,例如多個網(wǎng)絡(luò)下載任務(wù),我該怎么去調(diào)度它們?nèi)カ@得網(wǎng)絡(luò)資源呢?再例如操作系統(tǒng)的進(jìn)程或線程調(diào)度,我該怎么去分配資源給多個任務(wù)呢?肯定不能全部一起擁有的,資源只有一個,那就要排隊。那么怎么排隊呢?用普通的隊列?但是對于那些優(yōu)先級高的線程怎么辦?那也太共產(chǎn)主義了吧,這時,你就會想到了優(yōu)先隊列,優(yōu)先隊列怎么實現(xiàn)?這個時候就出現(xiàn)了堆,你要進(jìn)一步學(xué)習(xí)堆到底是個什么東西。
最后,再次回到題目,在我看來數(shù)據(jù)結(jié)構(gòu)會潛移默化的影響你的邏輯思維,最后要我們要學(xué)習(xí)的還是抽象的思想和解決問題的能力。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容