作為一個Java程序員笙以,我為何要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法呢淌实?的確現(xiàn)在Java語言已經(jīng)很強大,它對數(shù)組源织、鏈表翩伪、堆、隊列等一系列數(shù)據(jù)結(jié)構(gòu)進(jìn)行了封裝谈息,使其應(yīng)用起來方便快捷缘屹。更何況現(xiàn)在無論是前端還是后端都有大量的控件可用。數(shù)據(jù)結(jié)構(gòu)和算法這些底層的東西侠仇,相對來說顯得并不是那么重要了轻姿。
但是一個只會使用代碼的程序員未來又有多少成長的可能呢?程序?qū)τ谖覀儊碚f到底有什么意義呢逻炊?在我看來互亮,程序是為了解決現(xiàn)實中存在的,我們無法用傳統(tǒng)的方法解決的問題余素。說到底豹休,編程只是工具,能夠解決實際的問題才是一本萬利桨吊。
舉個例子威根,我們應(yīng)該都知道拋硬幣的實驗,如果讓你拋10次硬幣视乐,并記錄正反面出現(xiàn)的概率洛搀,這個很簡單,每個人都能做到佑淀。但是讓你拋1千次留美、1萬次甚至是10萬次呢。這個就很困難伸刃。但是如果讓程序員寫個程序來模擬這個實驗谎砾,那么分分鐘就可以實現(xiàn)。
由此可見程序模擬現(xiàn)實的能力和效率是多么的高捧颅。但是寫出程序的前提是要將現(xiàn)實問題的條件虛擬化棺榔,也就是說如何去模擬現(xiàn)實,如何去存儲現(xiàn)實中的數(shù)據(jù)隘道,如何去寫算法症歇,并努力提高算法的效率才是程序?qū)崿F(xiàn)的前提郎笆。由此可見數(shù)據(jù)結(jié)構(gòu)和算法的重要性。
數(shù)據(jù)結(jié)構(gòu)是指數(shù)據(jù)在計算機內(nèi)存空間中或磁盤中的組織形式忘晤。數(shù)據(jù)結(jié)構(gòu)可分為通用數(shù)據(jù)結(jié)構(gòu)宛蚓、專用數(shù)據(jù)結(jié)構(gòu)、圖和外部存儲设塔。通用數(shù)據(jù)結(jié)構(gòu)包括數(shù)組凄吏、鏈表、樹及哈希表闰蛔。專用數(shù)據(jù)結(jié)構(gòu)包括棧痕钢、隊列、優(yōu)先級隊列序六。
如果想在計算機里存儲類似人事記錄任连、存貨記錄、合同表等數(shù)據(jù)則只需要通用數(shù)據(jù)結(jié)構(gòu)即可例诀。如人事記錄随抠,可能需要存儲某個人的工號、姓名繁涂、性別、職位秉沼、簡歷等諸多信息。那么可以把這些信息保存到數(shù)組中漠魏,通過數(shù)組的索引便可以操作這些保存在內(nèi)存中的數(shù)據(jù)哪自。當(dāng)然該用數(shù)組還是鏈表,這要視情況而定胧华,在解決問題的同時要清楚不同數(shù)據(jù)結(jié)構(gòu)的特性才能夠做到矩动。
而算法則是實現(xiàn)問題的清晰準(zhǔn)確的代碼指令篮迎。有了算法代碼才真正擁有了靈魂甜橱,才能夠高效而迅速的解決現(xiàn)實生活中各種各樣的問題岂傲。學(xué)好算法的關(guān)鍵是盡量寫出簡潔易讀并且時間和空間復(fù)雜度盡量小的算法。算法是一個程序員的造詣,是一種需要不斷練習(xí)的技巧,也是一種藝術(shù)。