00|重學數據結構篇

數據結構的定義

數據結構研究的是數據如何在計算機中進行組織和存儲,使得我們可以高效的獲取數據或修改數據。

爲什麼要學習數據結構

數據結構是所有計算機專業學生必修的課程。以我自己爲例,我本科並不是計算機專業,但是我的專業隸屬於計算機科學學院,數據結構和算法設計與分析是必修的專業課程,要知道,我本科大部分時間都只是在實驗室玩玩單片機,搭搭智能小車。大部分同學,在通過數據結構與算法期末考試後,就再也沒有拿起這兩本教材。

在這裏插入圖片描述

算法的重要性不言而喻,而近乎任何一本算法教材,都包含大量的篇幅講解數據結構。

相信對數據結構與算法有一定了解的同學來說,對如下的等式並不陌生:“數據結構 + 算法 = 程序”。這是 Niklaus Wirth 在 1976 年寫的一本書,這本書強調了數據結構和算法是內在聯繫的,在當時是最有影響力的計算機科學著作之一。

App 開發的門檻越來越低,一個簡單功能的 App,一個毫無開發經驗的同學,跟着視頻的講解或者工具書的學習,從無到有的開發出一款功能簡易的 App 可能只需要幾天甚至更短的時間。我在幾天的時間裏,通過看《第一行代碼》一書,就可以開發出一款能滿足基本功能需求的智能家居客戶端 App,能夠基於開源項目修改定製一款自己的藍牙 App。

在這裏插入圖片描述

蘋果的 WWDC 讓我們見到了最年輕的開發者和最年長的開發者,不禁讓我們內心發問:開發一款 App 或許並不需要數據結構與算法?真的有必要花大量精力系統的學習數據結構和算法嗎?幾個月的培訓,就可以找到一份薪水還可以的研發崗位,這樣的案例非常常見。

在我看來,簡單的功能對數據結構和算法的要求幾乎沒有,或者要求不高,業務能力強的工程師,能夠開發出一款功能非常豐富的 App。但是,隨着用戶量、數據量的劇增,沒有優秀的數據結構作爲支撐,App 的性能、用戶體驗等將會大大折扣。

一個通訊錄軟件,當聯繫人上千或者上萬時,如何在硬件性能較差的設備上快速的搜索聯繫人?需要什麼樣的數據結構來組織和存儲數據?

對於非計算機專業人員,工作的重心在於軟件的創意、產品體驗、業務邏輯等方面,對數據結構的要求並不高。應聘大公司的崗位,需要同學們擁有紮實的數據結構和算法功底,大公司需要能夠解決計算機科學方面的問題。數據結構和算法不紮實,將會是限制一名技術研發人員持續成長的天花板。
在這裏插入圖片描述

數據結構的分類

數據結構可以爲分:線性結構、樹結構和圖結構。
在這裏插入圖片描述
每一種結構類型,都擁有許多的應用實例。
在這裏插入圖片描述

數據結構的應用

在計算機的世界裏,數據結構無處不在。數據庫的實現會使用到 B+樹這種數據結構;Redis 的 sortedset 使用到了跳錶;操作系統的進程調度使用到了優先隊列;文件壓縮會應用哈夫曼樹等等。
在這裏插入圖片描述

大量的算法,以數據結構爲基石。以遊戲中的尋路算法爲例,深度優先遍歷和廣度優先遍歷都需要數據結構的支持。

在這裏插入圖片描述

隨便說了這麼多,從下一篇文章開始,對於每一個具體的數據結構,就一個一個的學習吧。

PS:關注微信公衆號「藍本本」,和我一起學習、進修和放縱好奇心。

拓展

1.	[玩轉數據結構 從入門到進階-慕課網實戰] 

https://coding.imooc.com/class/207.html

2.	[學算法有什麼用?唉,對你來說,可能真沒用]

https://mp.weixin.qq.com/s/D9Y8KgkgKrH4hPMTw-fD0w

3.	10-year-old Bay Area boy is youngest app developer at Apple’s WWDC

https://abc7news.com/wwdc-apple-app-developer-apps/5336352/

4.	Algorithms + Data Structures = Programs

https://en.wikipedia.org/wiki/Algorithms_%2B_Data_Structures_%3D_Programs

5.	Why Redis SortedSet uses Skip List instead of Balanced Tree?

https://stackoverflow.com/questions/45115047/why-redis-sortedset-uses-skip-list-instead-of-balanced-tree

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章