說到算法,就不能不說起數據結構 。今天我來講一講,什么是數據結構?程序員怎么學好數據結構?
我們介紹算法的時候說過,計算機當中的算法,本質就是一系列程序指令,用以解決特定的運算和邏輯問題 。
而所謂數據結構,是數據的組織、管理和存儲格式 。簡單理解的話,數據結構就是執行算法的“原材料” 。
俗話講,巧婦難為無米之炊 。算法,就好比是聰明勤勞的女主人,而數據結構,就是用來做飯做菜的柴米油鹽 。
數據結構都有哪些組成方式呢?
首先,是線性結構 。
但凡有過一點編程基礎的小伙伴,肯定都知道數組,這就是一種典型的線性數據結構 。
除了數組以外,鏈表也是一種重要的數據結構 。Java集合框架中的LinkList類,底層實現就是鏈表 。
以數組或者鏈表為基礎,可以封裝出兩種數據結構,一個是棧,它的特點是先進后出;另一個是隊列,它的特點是先進先出 。棧和隊列,可以滿足不同的特定需求 。
其次,是樹 。
樹,是一類一對多的數據結構,天生就非常適合用來檢索 。Java集合框架當中有一個TreeMap類,用于存儲鍵和值的映射,不但查找很高效,還能保證鍵的有序排列 。它的底層實現就是一種名為紅黑樹的特殊二叉樹 。
另外,我們操作系統當中的文件索引,有很多都是用B樹實現的 。
而我們常用的MySQL數據庫,以B+樹作為常用索引 。
再其次,是圖 。
圖,是一類多對多的數據結構,非常適合用于表述眾多對象之間的復雜關系 。大家肯定都乘坐過地鐵,一個城市的地鐵交通線路,站與站之間形成的關聯,就是一個圖結構 。
在一群人之間,有著復雜的人際交往關系,他們所形成的的關系網絡也是一個圖結構 。
在圖的基礎上,產生了許多實用的算法 。比如,我們用百度地圖或者高德地圖進行導航的時候,背后就是圖的最短路徑算法 。
最后,還有一些復合數據結構 。
比如咱們常用的哈希表,它的組成就是數組和鏈表的結合 。
【數據結構是最難的課嗎 數據結構是什么意思】 還有一種比較有意思的數據結構叫做跳表,它在普通鏈表的基礎上,增加了很多個索引層 。Redis當中的集合 sortedSet,背后的數據結構就是跳表 。
復合數據結構,往往結合了多種基礎數據結構的優勢,在特定的場景下非常有用 。
這就是數據結構的幾種組成方式,大家可以把這張圖保存一下 。由于篇幅原因,圖里面所列出的具體數據結構,只是最最常用的幾種,并非全部 。
那么,我們該如何學好數據結構呢?
就像學習算法一樣,我們同樣可以通過看書、看網上的視頻課程,來了解常用的數據結構原理 。
入門級別的書,比較推薦程杰老師的《大話數據結構》,以及我自己出版的《漫畫算法》系列 。
進階級別的書,推薦看看《算法4》、《算法導論》 。
課程的話,推薦極客時間王爭老師的《數據結構與算法之美》,講得非常全面 。
此外,我們也可以動手去寫代碼,自己實現數據結構的基本功能,這樣印象會很深刻 。
像紅黑樹這么復雜的數據結構,一上來可能很難直接寫出來 。我們可以從簡單的開始,比如嘗試實現一個鏈表的添加節點和刪除節點功能,比如實現二叉樹的前序、中序、后序遍歷,等等 。
最后,有些網站,會提供可視化的數據結構演示,非常生動 。小伙伴們可以去這些網站看看 。比如visuAlgo這個網站,就有著很豐富的案例 。
-- 展開閱讀全文 --
推薦閱讀
- 低碳減脂餐食譜一日三餐 低碳水食物有哪些
- 垂直農業的劣勢是什么 垂直農場為啥不能普及
- 橘燦精華怎么打開后蓋
- 新鮮萵筍可以切片冷凍嗎
- 曬干的小魚干怎么保存 曬干的魚干怎么存放
- 稅務ukey怎么使用
- 天干地支五行對照表 天干地支五行對照
- 關于兄妹的語錄 表達兄妹感情的句子
- 剪映網易云音樂無法導入
