數(shù)據(jù)結(jié)構(gòu)(轉(zhuǎn)載)

數(shù)據(jù)結(jié)構(gòu)的本質(zhì)就在于:如何將現(xiàn)實(shí)世界中各種各樣的數(shù)據(jù)放入到內(nèi)存中锨用,并且如何在內(nèi)存中操作這些數(shù)據(jù),如何評(píng)價(jià)這些存儲(chǔ)方案和操作方法隘谣。

數(shù)據(jù)結(jié)構(gòu)難學(xué)嗎增拥?是難學(xué)。

為什么難學(xué)寻歧?一開始上來就講空間復(fù)雜度掌栅、時(shí)間復(fù)雜度,就講抽象數(shù)據(jù)码泛,當(dāng)然難學(xué)了猾封。

1、生活噪珊、生產(chǎn)等現(xiàn)實(shí)世界的數(shù)據(jù)有各種各樣的組成形式晌缘。例如一個(gè)課程的所有學(xué)生的成績(一組數(shù)據(jù))逾苫,一個(gè)班全部學(xué)生的所有課程的成績(一張表)、一個(gè)單位的人員結(jié)構(gòu)(樹)等等枚钓。

2铅搓、這些數(shù)據(jù)都要先加載到內(nèi)存中,再送到CPU中進(jìn)行計(jì)算搀捷。

3星掰、內(nèi)存的最基本單位叫做存儲(chǔ)單元,一個(gè)字節(jié)(不討論理論中的嫩舟、個(gè)別情況的)氢烘。存儲(chǔ)單元相當(dāng)于一個(gè)空盒子,可以放置數(shù)據(jù)家厌。為了便于管理播玖,盒子會(huì)給一個(gè)編號(hào),當(dāng)然存儲(chǔ)單元也會(huì)有編號(hào)饭于,其實(shí)就是地址蜀踏。理論上地址的方案可以有多種(計(jì)算機(jī)組成原理和操作系統(tǒng)的任務(wù)),不過對于程序員來說掰吕,這些都跟我們無關(guān)果覆,為了簡單起見,我們把存儲(chǔ)單元的編號(hào)(地址)都編成0殖熟、1局待、2、3菱属、4钳榨,......這樣的,于是這些編號(hào)或地址的取值范圍纽门,我們就稱地址空間薛耻。這個(gè)地址空間,跟一維坐標(biāo)軸一樣膜毁,所以是一維線性空間昭卓。

4、很明顯瘟滨,數(shù)據(jù)就是一個(gè)個(gè)放入到這些存儲(chǔ)單元中候醒,就象我們把一個(gè)單位的物品放入盒子一樣。現(xiàn)在杂瘸,假設(shè)一個(gè)盒子只能裝入一個(gè)單位的物品倒淫。因而,一個(gè)存儲(chǔ)單元也只能放入一個(gè)單位的數(shù)據(jù)败玉。

5敌土、接下來镜硕,假設(shè)說,我們有很多很多的空盒子(X個(gè))返干。有一天兴枯,我們要將若干單位物品(N個(gè))放入盒子中,那么我們可以在一個(gè)盒子放入一個(gè)單位物品矩欠。依此類推财剖,我們可以在一個(gè)存儲(chǔ)單元中放置一個(gè)單位的數(shù)據(jù)。

6癌淮、再接下來躺坟,我們有兩種放置方案:一個(gè)挨一個(gè)地連續(xù)地放置物品;當(dāng)然乳蓄,也可以不連續(xù)地放置物品咪橙。依此類推,在內(nèi)存當(dāng)中放置數(shù)據(jù)虚倒,也有兩種方案美侦,連續(xù)地放置數(shù)據(jù),或者不連續(xù)地放置數(shù)據(jù)裹刮。為什么會(huì)有不連續(xù)的放置方案呢音榜?原因很簡單,一個(gè)主要的原因是捧弃,內(nèi)存的空間利用率高,碎片少(操作系統(tǒng)的存儲(chǔ)管理的知識(shí)擦囊,且不用理會(huì))违霞,刪除舊有的數(shù)據(jù)很容易(這個(gè)是數(shù)據(jù)結(jié)構(gòu)的內(nèi)容)。

7瞬场、現(xiàn)在买鸽,可以把這兩個(gè)將數(shù)據(jù)放入到存儲(chǔ)單元的方案叫做物理存儲(chǔ)。對連續(xù)物理存儲(chǔ)方案來說贯被,事情比較好辦眼五,通過編號(hào)(索引、下標(biāo))就可以找到物品彤灶,對于不連續(xù)的方案看幼,那么我們就要在一個(gè)物品上面標(biāo)記下一個(gè)物品的位置,這個(gè)標(biāo)記就是下一個(gè)物品的地址(指針)幌陕。當(dāng)然诵姜,在計(jì)算機(jī)中,指針的記錄本身也要占用內(nèi)存的存儲(chǔ)單元搏熄,所以我們在c語言中用結(jié)構(gòu)體把數(shù)據(jù)和指針組織成為一個(gè)單位棚唆。通過這個(gè)指向關(guān)系暇赤,我們可以在不連續(xù)的放置方案中依次地查找我們所需要的東西(物品或數(shù)據(jù))。

8宵凌、接下來鞋囊,就象我們經(jīng)常進(jìn)行從盒子當(dāng)中查詢物品、取用物品或增加物品等操作一樣瞎惫,我們也要進(jìn)行從內(nèi)存當(dāng)中查詢數(shù)據(jù)溜腐、取用(刪除)數(shù)據(jù)或增加數(shù)據(jù)等操作。那么微饥,對于不同的物理存儲(chǔ)方案來說逗扒,其方法是不一樣的。這個(gè)想一想欠橘,我們?nèi)绾螌Ω墩鎸?shí)的物品矩肩,我們就如何對付內(nèi)存中的數(shù)據(jù)。這就是數(shù)據(jù)的物理存儲(chǔ)方案的數(shù)據(jù)操作肃续。

9黍檩、好了,搞懂這些始锚,字符串之類的知識(shí)點(diǎn)就不難了刽酱。

10、記住一點(diǎn)瞧捌,只有兩種物理存儲(chǔ)結(jié)構(gòu):連續(xù)的和不連續(xù)的棵里,因?yàn)閮?nèi)存的存儲(chǔ)單元的地址(編號(hào))是0、1姐呐、2殿怜、3......(一維地址空間、或者線性地址空間)曙砂。

11头谜、是不是只有物理存儲(chǔ)結(jié)構(gòu)(方案)就可以了呢?在第1條中說過鸠澈,現(xiàn)實(shí)當(dāng)中的數(shù)據(jù)是有各種各樣的結(jié)構(gòu)的柱告。而在第10條,我們強(qiáng)調(diào)了物理放置方案只有2種:連續(xù)的和不連續(xù)的笑陈。

12际度、于是就產(chǎn)生一個(gè)問題,如何將現(xiàn)實(shí)世界當(dāng)中的關(guān)系各種各樣的數(shù)據(jù)放入到內(nèi)存之中新锈。

13甲脏、解決第12條中的問題,我們可以分兩步走,第1步是將現(xiàn)實(shí)世界的數(shù)據(jù)組織成為邏輯結(jié)構(gòu)块请,第2步再把邏輯結(jié)構(gòu)的數(shù)據(jù)映射到物理結(jié)構(gòu)中娜氏。

14、顯然墩新,在第1步中贸弥,我們拋去數(shù)據(jù)的其它屬性,只留下數(shù)據(jù)的兩個(gè)屬性就可以了:一個(gè)屬性是數(shù)據(jù)的值海渊,另一個(gè)屬性就是數(shù)據(jù)之間的關(guān)系绵疲。這兩個(gè)屬性就得到一個(gè)邏輯結(jié)構(gòu):graph(圖),這就是離散數(shù)學(xué)中的圖論臣疑。那么盔憨,這就是科學(xué)家的事情,他們負(fù)責(zé)針對具體的問題讯沈,將現(xiàn)實(shí)世界的數(shù)據(jù)構(gòu)造出對應(yīng)的graph(圖)郁岩。

15、在第2步中缺狠,我們要做的事情问慎,把這個(gè)graph映射到物理存儲(chǔ)結(jié)構(gòu)中,這就是數(shù)據(jù)結(jié)構(gòu)要做的事情了挤茄。顯然如叼,我們可以用數(shù)組來存儲(chǔ),也可以用鏈表來存儲(chǔ)穷劈,回憶一下最短路徑算法的兩個(gè)做法笼恰。ps.,二維數(shù)組歇终、三維數(shù)組也是一個(gè)連續(xù)存儲(chǔ)的結(jié)構(gòu)挖腰,在c語言debug下,看看地址就知道了练湿。那么,不連續(xù)的存儲(chǔ)結(jié)構(gòu)审轮,也就是鏈表肥哎,當(dāng)然有很多的衍生:雙向鏈表、十字鏈表疾渣、等等篡诽。

16、顯然榴捡,不管現(xiàn)實(shí)世界中的數(shù)據(jù)之間的關(guān)系如何杈女,我們都可以用graph來描述,只不過是,不同的數(shù)據(jù)關(guān)系有不同的結(jié)構(gòu)而已达椰,比如:樹翰蠢、森林、mesh啰劲,等等梁沧。

17、當(dāng)然蝇裤,我們要掌握一些常見的graph的操作方法廷支,最主要就是搜索方法。而且還要注意栓辜,這些方法是分兩個(gè)層次的恋拍,一個(gè)物理存儲(chǔ)結(jié)構(gòu)這個(gè)層次,一個(gè)是邏輯存儲(chǔ)結(jié)構(gòu)這個(gè)層次的藕甩。那么現(xiàn)在施敢,深度優(yōu)先搜索、廣度優(yōu)先搜索是哪個(gè)層次呢辛萍?

18悯姊、當(dāng)然,我們還要掌握一下存儲(chǔ)結(jié)構(gòu)的壓縮贩毕。

19悯许、到了這個(gè)時(shí)候,我們還要問一下辉阶,各種方案的優(yōu)劣性質(zhì)如何先壕,也就是空間復(fù)雜度和時(shí)間復(fù)雜度了。

20谆甜、當(dāng)然垃僚,我們這個(gè)時(shí)候,還要進(jìn)一步的問一問规辱,能不能將這些邏輯結(jié)構(gòu)給出一個(gè)統(tǒng)一的描述谆棺,那么,就是抽象數(shù)據(jù)了罕袋。

21改淑、當(dāng)然,我們還要掌握邏輯存儲(chǔ)結(jié)構(gòu)的各種樹的優(yōu)化浴讯,特別是針對不同的應(yīng)用朵夏,比如紅黑樹、B樹榆纽。

22仰猖、當(dāng)然捏肢,我們最后還要學(xué)習(xí)一下外存的存儲(chǔ)結(jié)構(gòu)。

23饥侵、當(dāng)然鸵赫,實(shí)驗(yàn)是少不了的。自己debug一下內(nèi)存單元的地址爆捞,并且在紙上手工的畫一下是最好了奉瘤。

24、最后煮甥,有了這些基礎(chǔ)盗温,剩下也就好辦了。

25成肘、不推薦教材卖局。尤其是國外的教材,先容許我默默地吐一下槽双霍,各種知識(shí)點(diǎn)零碎不堪砚偶,不成體系,不成系統(tǒng)洒闸。

編輯于 2015-09-14

作者保留權(quán)利

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末染坯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子丘逸,更是在濱河造成了極大的恐慌单鹿,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件深纲,死亡現(xiàn)場離奇詭異仲锄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)湃鹊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門儒喊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人币呵,你說我怎么就攤上這事怀愧。” “怎么了余赢?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵掸驱,是天一觀的道長。 經(jīng)常有香客問我没佑,道長,這世上最難降的妖魔是什么温赔? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任蛤奢,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啤贩。我一直安慰自己待秃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布痹屹。 她就那樣靜靜地躺著章郁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪志衍。 梳的紋絲不亂的頭發(fā)上暖庄,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音楼肪,去河邊找鬼培廓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛春叫,可吹牛的內(nèi)容都是我干的肩钠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼暂殖,長吁一口氣:“原來是場噩夢啊……” “哼价匠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起呛每,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤踩窖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后莉给,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毙石,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年颓遏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了徐矩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叁幢,死狀恐怖滤灯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情曼玩,我是刑警寧澤鳞骤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站黍判,受9級(jí)特大地震影響豫尽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜顷帖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一美旧、第九天 我趴在偏房一處隱蔽的房頂上張望渤滞。 院中可真熱鬧,春花似錦榴嗅、人聲如沸妄呕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绪励。三九已至,卻和暖如春唠粥,著一層夾襖步出監(jiān)牢的瞬間疏魏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工厅贪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蠢护,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓养涮,卻偏偏與公主長得像葵硕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子贯吓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容