當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 程序員小灰
[導(dǎo)讀]前幾天,小灰給大家介紹了什么是算法。說(shuō)到算法,就不能不說(shuō)起數(shù)據(jù)結(jié)構(gòu)。今天我來(lái)講一講,什么是數(shù)據(jù)結(jié)構(gòu)?程序員怎么學(xué)好數(shù)據(jù)結(jié)構(gòu)?我們介紹算法的時(shí)候說(shuō)過(guò),計(jì)算機(jī)當(dāng)中的算法,本質(zhì)就是一系列程序指令,用以解決特定的運(yùn)算和邏輯問(wèn)題。而所謂數(shù)據(jù)結(jié)構(gòu),是數(shù)據(jù)的組織、管理和存儲(chǔ)格式。簡(jiǎn)單理解的話,...

前幾天,小灰給大家介紹了什么是算法。



說(shuō)到算法,就不能不說(shuō)起數(shù)據(jù)結(jié)構(gòu)。今天我來(lái)講一講,什么是數(shù)據(jù)結(jié)構(gòu)?程序員怎么學(xué)好數(shù)據(jù)結(jié)構(gòu)?



我們介紹算法的時(shí)候說(shuō)過(guò),計(jì)算機(jī)當(dāng)中的算法,本質(zhì)就是一系列程序指令,用以解決特定的運(yùn)算和邏輯問(wèn)題。



而所謂數(shù)據(jù)結(jié)構(gòu),是數(shù)據(jù)的組織、管理和存儲(chǔ)格式。簡(jiǎn)單理解的話,數(shù)據(jù)結(jié)構(gòu)就是執(zhí)行算法的“原材料”。



俗話講,巧婦難為無(wú)米之炊。算法,就好比是聰明勤勞的女主人,而數(shù)據(jù)結(jié)構(gòu),就是用來(lái)做飯做菜的柴米油鹽。





數(shù)據(jù)結(jié)構(gòu)都有哪些組成方式呢?



首先,是線性結(jié)構(gòu)。



但凡有過(guò)一點(diǎn)編程基礎(chǔ)的小伙伴,肯定都知道數(shù)組,這就是一種典型的線性數(shù)據(jù)結(jié)構(gòu)。



除了數(shù)組以外,鏈表也是一種重要的數(shù)據(jù)結(jié)構(gòu)。Java集合框架中的LinkList類,底層實(shí)現(xiàn)就是鏈表。


以數(shù)組或者鏈表為基礎(chǔ),可以封裝出兩種數(shù)據(jù)結(jié)構(gòu),一個(gè)是棧,它的特點(diǎn)是先進(jìn)后出;另一個(gè)是隊(duì)列,它的特點(diǎn)是先進(jìn)先出。棧和隊(duì)列,可以滿足不同的特定需求。


其次,是。



樹,是一類一對(duì)多的數(shù)據(jù)結(jié)構(gòu),天生就非常適合用來(lái)檢索。Java集合框架當(dāng)中有一個(gè)TreeMap類,用于存儲(chǔ)鍵和值的映射,不但查找很高效,還能保證鍵的有序排列。它的底層實(shí)現(xiàn)就是一種名為紅黑樹的特殊二叉樹。





另外,我們操作系統(tǒng)當(dāng)中的文件索引,有很多都是用B樹實(shí)現(xiàn)的。


而我們常用的MySQL數(shù)據(jù)庫(kù),以B 樹作為常用索引。





再其次,是



圖,是一類多對(duì)多的數(shù)據(jù)結(jié)構(gòu),非常適合用于表述眾多對(duì)象之間的復(fù)雜關(guān)系。大家肯定都乘坐過(guò)地鐵,一個(gè)城市的地鐵交通線路,站與站之間形成的關(guān)聯(lián),就是一個(gè)圖結(jié)構(gòu)。





在一群人之間,有著復(fù)雜的人際交往關(guān)系,他們所形成的的關(guān)系網(wǎng)絡(luò)也是一個(gè)圖結(jié)構(gòu)。





在圖的基礎(chǔ)上,產(chǎn)生了許多實(shí)用的算法。比如,我們用百度地圖或者高德地圖進(jìn)行導(dǎo)航的時(shí)候,背后就是圖的最短路徑算法。



最后,還有一些復(fù)合數(shù)據(jù)結(jié)構(gòu)。



比如咱們常用的哈希表,它的組成就是數(shù)組和鏈表的結(jié)合。





還有一種比較有意思的數(shù)據(jù)結(jié)構(gòu)叫做跳表,它在普通鏈表的基礎(chǔ)上,增加了很多個(gè)索引層。Redis當(dāng)中的集合 sortedSet,背后的數(shù)據(jù)結(jié)構(gòu)就是跳表。





復(fù)合數(shù)據(jù)結(jié)構(gòu),往往結(jié)合了多種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)當(dāng)然優(yōu)勢(shì),在特定的場(chǎng)景下非常有用。



這就是數(shù)據(jù)結(jié)構(gòu)的幾種組成方式,大家可以把這張圖保存一下。由于篇幅原因,圖里面所列出的具體數(shù)據(jù)結(jié)構(gòu),只是最最常用的幾種,并非全部。






那么,我們?cè)撊绾螌W(xué)好數(shù)據(jù)結(jié)構(gòu)呢?



就像學(xué)習(xí)算法一樣,我們同樣可以通過(guò)看書、看網(wǎng)上的視頻課程,來(lái)了解常用的數(shù)據(jù)結(jié)構(gòu)原理。



入門級(jí)別的書,比較推薦程杰老師的《大話數(shù)據(jù)結(jié)構(gòu)》,以及我自己出版的《漫畫算法》系列。





進(jìn)階級(jí)別的書,推薦看看《算法4》、《算法導(dǎo)論》。



課程的話,推薦極客時(shí)間王爭(zhēng)老師的《數(shù)據(jù)結(jié)構(gòu)與算法之美》,講的非常全面。



此外,我們也可以動(dòng)手去寫代碼,自己實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)的基本功能,這樣印象會(huì)很深刻。



像紅黑樹這么復(fù)雜的數(shù)據(jù)結(jié)構(gòu),一上來(lái)可能很難直接寫出來(lái)。我們可以從簡(jiǎn)單的開始,比如嘗試實(shí)現(xiàn)一個(gè)鏈表的添加節(jié)點(diǎn)和刪除節(jié)點(diǎn)功能,比如實(shí)現(xiàn)二叉樹的前序、中序、后序遍歷,等等。



最后,有些網(wǎng)站,會(huì)提供可視化的數(shù)據(jù)結(jié)構(gòu)演示,非常生動(dòng)。小伙伴們可以去這些網(wǎng)站看看。比如visuAlgo這個(gè)網(wǎng)站,就有著很豐富的案例。





大家還關(guān)注過(guò)哪些算法與數(shù)據(jù)結(jié)構(gòu)的教學(xué)網(wǎng)站,也歡迎在留言區(qū)寫出。



好了,關(guān)于數(shù)據(jù)結(jié)構(gòu),我就給大家介紹到這里。如果覺(jué)得這篇文章對(duì)你有幫助,希望可以點(diǎn)個(gè)在看點(diǎn)個(gè)贊,感謝大家~~



最近,小灰嘗試走出舒適區(qū),入駐B站開始錄制程序員相關(guān)的視頻。歡迎大家關(guān)注小灰的B站號(hào)【我是程序員小灰】,給個(gè)一鍵三連,感謝支持哦~~


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

(全球TMT2022年7月11日訊)7月7日,由徑碩科技(JINGdigital)主辦、MEC睿達(dá)會(huì)承辦的“萬(wàn)數(shù)有靈·2022中國(guó)數(shù)字營(yíng)銷創(chuàng)新增長(zhǎng)峰會(huì)”在深圳舉行。作為一家營(yíng)銷科技公司,徑碩科技提供的是一流的營(yíng)銷軟件產(chǎn)...

關(guān)鍵字: CE DIGITAL 數(shù)字化 數(shù)據(jù)結(jié)構(gòu)

Redis為什么那么快?除了它是內(nèi)存數(shù)據(jù)庫(kù),使得所有的操作都在內(nèi)存上進(jìn)行之外,還有一個(gè)重要因素,它實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu),使得我們對(duì)數(shù)據(jù)進(jìn)行增刪查改操作時(shí),Redis能高效的處理。因此,這次我們就來(lái)好好聊一下Redis數(shù)據(jù)結(jié)構(gòu),...

關(guān)鍵字: 數(shù)據(jù)結(jié)構(gòu) REDIS 字符串 節(jié)點(diǎn)

哈嘍,大家好,我是瓜哥,致力于分享互聯(lián)網(wǎng)各領(lǐng)域干貨。前幾天,有人問(wèn)瓜哥,學(xué)習(xí)編程語(yǔ)言有什么好的建議沒(méi)?今天簡(jiǎn)單和大家分享幾點(diǎn)學(xué)習(xí)編程的建議,希望可以幫助到大家。1.只要開始,就不要怕晚瓜哥經(jīng)??吹竭@些問(wèn)題,大四學(xué)編程還來(lái)...

關(guān)鍵字: 編程 代碼 基礎(chǔ)知識(shí) 數(shù)據(jù)結(jié)構(gòu)

模塊化是指解決一個(gè)復(fù)雜問(wèn)題時(shí)自頂向下逐層把系統(tǒng)劃分成若干模塊的過(guò)程,有多種屬性,分別反映其內(nèi)部特性。

關(guān)鍵字: 模塊化 軟件模塊 數(shù)據(jù)結(jié)構(gòu)

大家好,我是小林。前幾天發(fā)了一篇「為了拿捏Redis數(shù)據(jù)結(jié)構(gòu),我畫了20張圖」,收獲了很多好評(píng),但是當(dāng)時(shí)急于發(fā)文,有些地方?jīng)]有寫完,也有些地方寫的不是很完善。然后我最近花了很多時(shí)間來(lái)完善文章,不僅加入了Redis新版本的...

關(guān)鍵字: 數(shù)據(jù)結(jié)構(gòu) REDIS 節(jié)點(diǎn) 字符串

大家好,我是小林。Redis為什么那么快?除了它是內(nèi)存數(shù)據(jù)庫(kù),使得所有的操作都在內(nèi)存上進(jìn)行之外,還有一個(gè)重要因素,它實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu),使得我們對(duì)數(shù)據(jù)進(jìn)行增刪查改操作時(shí),Redis能高效的處理。因此,這次我們就來(lái)好好聊一下R...

關(guān)鍵字: 數(shù)據(jù)結(jié)構(gòu) REDIS

Redis為什么那么快?除了它是內(nèi)存數(shù)據(jù)庫(kù),使得所有的操作都在內(nèi)存上進(jìn)行之外,還有一個(gè)重要因素,它實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu),使得我們對(duì)數(shù)據(jù)進(jìn)行增刪查改操作時(shí),Redis能高效的處理。因此,這次我們就來(lái)好好聊一下Redis數(shù)據(jù)結(jié)構(gòu),...

關(guān)鍵字: 數(shù)據(jù)結(jié)構(gòu)

摘 要:大數(shù)據(jù)是從各種各樣來(lái)源中搜集得到的海量數(shù)據(jù)信息的總稱。從大數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)看, 大約90%的數(shù)據(jù)是非結(jié)構(gòu)化的,同時(shí)也也面臨復(fù)雜,性、安全和隱私風(fēng)險(xiǎn)等新挑戰(zhàn)。文章分析了企 業(yè)的大數(shù)據(jù)應(yīng)用,也提出了國(guó)家和政府部門未來(lái)建...

關(guān)鍵字: 大數(shù)據(jù) 政府部門 企業(yè) 數(shù)據(jù)結(jié)構(gòu)

最近在看數(shù)模的東西的時(shí)候發(fā)現(xiàn)了圖和網(wǎng)絡(luò)這一塊涉及到了數(shù)據(jù)結(jié)構(gòu)中的一些概念,于是將之前總結(jié)的數(shù)據(jù)結(jié)構(gòu)拿出來(lái)看一下,也當(dāng)是復(fù)習(xí),有需要查找的直接control + F查找

關(guān)鍵字: 數(shù)據(jù)結(jié)構(gòu) 概念

程序員小灰

379 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉