數(shù)據(jù)結(jié)構(gòu)入門

? ? ????從來不寫筆記的我為什么突然想寫筆記壹店?最近不知道是怎么回事诺舔?感覺自己的記性非常不好,比如接觸了一個新東西卤唉,就算了解了其實現(xiàn)原理涩惑,能跟著思路自己手動完成,但是不過一個星期又忘了桑驱?難道是自己老了竭恬?從前找東西都是找的度娘,就算是使用過的東西也是同樣的找度娘熬的?記性是真的很差痊硕。所以現(xiàn)在想把最近所學(xué)的東西歸納總結(jié)一下,就算忘記了也能不斷的通過筆記來復(fù)習(xí)悦析,都說好記性不如好鍵盤寿桨,最近在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),想把數(shù)據(jù)結(jié)構(gòu)做一個總結(jié)强戴,這個只是個人的總結(jié)亭螟,大牛路過的路望指點其中的不足,作為一名小白我只想把所學(xué)的東西做一個記錄骑歹。

一预烙、為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)?

????????舉個例子來說道媚,在古代為什么我們看的武俠電視劇里面的人在修煉武功的時候都要先練習(xí)基本功扁掸?就像少林寺和尚為什么進門之前要先挑水劈柴念經(jīng),為的就是修煉內(nèi)功最域,只有修煉好了內(nèi)功才能在高階武功上進行深造谴分,一步一步的達到上層。這就是為什么一天屠龍記的周芷若在內(nèi)功不扎實的情況下修煉九陰真經(jīng)達不到上層的原因镀脂。作為一個程序員牺蹄,我們學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的目的就是為了打好基本功,只有這樣一步一個腳印的走下去才能達到高級工程師的水平薄翅。而且在大型公司面試的時候基本都要求會數(shù)據(jù)結(jié)構(gòu)汇陆,因為我們的程序就是數(shù)據(jù)結(jié)構(gòu)和算法組成的皇忿,所以其研究價值比較高瞬欧。

二颜凯、什么是數(shù)據(jù)結(jié)構(gòu)?

????????數(shù)據(jù)結(jié)構(gòu)是對在計算機內(nèi)存中的數(shù)據(jù)的一種安排暑竟。也可以理解為對計算機運算的數(shù)據(jù)單元的一個抽象斋射。很抽象對不對,反正當(dāng)初我在學(xué)習(xí)的時候是沒聽懂這個是什么意思,但是如果我自己來理解的話绩鸣,我覺得就是數(shù)據(jù)與數(shù)據(jù)之間存在的一種關(guān)系怀大,是我們的數(shù)據(jù)在計算機中的模型。

三呀闻、數(shù)據(jù)結(jié)構(gòu)研究的內(nèi)容

(一)數(shù)據(jù)的邏輯結(jié)構(gòu)

? ??????????1. 集合結(jié)構(gòu)

????????????????????數(shù)據(jù)結(jié)構(gòu)中的元素之間除了"同屬一個集合" 的相互關(guān)系外化借,別無其他關(guān)系。

????????????2. 線性結(jié)構(gòu)

????????????????????數(shù)據(jù)結(jié)構(gòu)中的元素存在一對一的相互關(guān)系;

????????????3. 樹形結(jié)構(gòu)

????????????????????數(shù)據(jù)結(jié)構(gòu)中的元素存在一對多的相互關(guān)系;

????????????4. 圖形結(jié)構(gòu)

????????????????數(shù)據(jù)結(jié)構(gòu)中的元素存在多對多的相互關(guān)系捡多。

????光看這幾個名詞我們是不太明白它是什么東西的蓖康,接下來上圖就好理解了。

? ? 根據(jù)我們的理解和認知我們大概可以從上圖了解到數(shù)據(jù)結(jié)構(gòu)是個什么東西了垒手。


(二)數(shù)據(jù)結(jié)構(gòu)的存儲結(jié)構(gòu)(物理結(jié)構(gòu))

????????????1. 表 ? ?

? ? ? ? ? ? 2.堆棧

? ? ? ? ? ? 3.隊列

? ? ? ? ? ? 4.數(shù)組

? ? ? ? ? ? 5.樹

? ? ? ? ? ? 6.圖


四蒜焊、線性表

對于表我們重點來研究線性表,什么是線性表科贬?

由零個或多個數(shù)據(jù)元素組成的有限序列泳梆。線性表屬于數(shù)據(jù)結(jié)構(gòu)中邏輯結(jié)構(gòu)中的線性結(jié)構(gòu)。

注意:

(1)線性表是一個序列榜掌。

(2)0個元素構(gòu)成的線性表是空表优妙。

(3)線性表中的第一個元素?zé)o前驅(qū),最后一個元素?zé)o后繼憎账,其他元素有且只有一個前驅(qū)和后繼套硼。

(4)線性表是有長度的,其長度就是元素個數(shù)胞皱,且線性表的元素個數(shù)是有限的邪意,也就是說,線性表的長度是有限的反砌。

線性表是線性結(jié)構(gòu)的一種雾鬼,那么線性表當(dāng)然也有物理結(jié)構(gòu),也就是說宴树,線性表有兩種策菜,分別是順序結(jié)構(gòu)的線性表(叫做順序表)和鏈式結(jié)構(gòu)的線性表(叫做鏈表)。

(一)順序存儲方式的線性表——順序表

順序表是指順序存儲結(jié)構(gòu)的線性表森渐,指的是用一段地址連續(xù)的存儲單元依次存儲線性表的數(shù)據(jù)元素做入。

順序表表現(xiàn)在物理內(nèi)存中冒晰,也就是物理上的存儲方式同衣,事實上就是在內(nèi)存中找個初始地址,然后通過占位的形式壶运,把一定的內(nèi)存空間給占了耐齐,然后把相同數(shù)據(jù)類型的數(shù)據(jù)元素依次放在這塊空地中。注意,這塊物理內(nèi)存的地址空間是連續(xù)的埠况。舉個例子來說就是“一個蘿卜一個坑”耸携、“排隊”等表現(xiàn)形式。

順序表的數(shù)據(jù)結(jié)構(gòu)的代碼表現(xiàn)形式為:

class Student{

Student[] data;

int size;

}

順序表的應(yīng)用:

ArrayList辕翰,Vector夺衍,ArrayQueue,ArrayDeque喜命,PriorityQueue沟沙。

并發(fā)包:CopyOnWriteArrayList、ArrayBlockingQueue壁榕、PriorityBlockingQueue等矛紫。

(一)鏈式存儲方式的線性表——鏈表

鏈表的特點是用一組任意的存儲單元存儲線性表的數(shù)據(jù)元素,這組存儲單元可以是連續(xù)的牌里,也可以是不連續(xù)的颊咬。

鏈表的分類:

1.單向鏈表

2.單向循環(huán)鏈表

將單鏈表中的終端結(jié)點的指針由空指針指向頭結(jié)點,這樣一來就使整個單鏈表形成了一個環(huán)牡辽,這種頭尾相連的單鏈表稱為單向循環(huán)鏈表喳篇,簡稱循環(huán)鏈表。

3.雙向鏈表

4.雙向循環(huán)鏈表

雙向循環(huán)列表是單向循環(huán)鏈表的每個結(jié)點中催享,在設(shè)置一個指向其前驅(qū)結(jié)點的指針域杭隙,這樣兩個單向循環(huán)鏈表就構(gòu)成了雙向循環(huán)鏈表。

單向鏈表的數(shù)據(jù)結(jié)構(gòu)的代碼表現(xiàn)形式為:

class Node{

Object data;? ? //元素? 數(shù)據(jù)域

Node next;? ? ? //指向當(dāng)前節(jié)點的下一個元素結(jié)點

}

雙向鏈表的數(shù)據(jù)結(jié)構(gòu)的代碼表現(xiàn)形式為:

class Node{

Object data;? ? //元素? 數(shù)據(jù)域

Node prev;? ? ? //指向當(dāng)前節(jié)點的上一個節(jié)點

Node next;? ? ? //指向當(dāng)前節(jié)點的下一個節(jié)點

}

單鏈表的應(yīng)用:MessageQueue因妙、LinkedBlockingQueue(并發(fā)包)痰憎。

雙鏈表的應(yīng)用:LinkedList、LinkedBlockingDeque(并發(fā)包)攀涵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铣耘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子以故,更是在濱河造成了極大的恐慌蜗细,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怒详,死亡現(xiàn)場離奇詭異炉媒,居然都是意外死亡,警方通過查閱死者的電腦和手機昆烁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門吊骤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人静尼,你說我怎么就攤上這事白粉〈矗” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵鸭巴,是天一觀的道長眷细。 經(jīng)常有香客問我,道長鹃祖,這世上最難降的妖魔是什么溪椎? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮恬口,結(jié)果婚禮上池磁,老公的妹妹穿的比我還像新娘。我一直安慰自己楷兽,他們只是感情好地熄,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芯杀,像睡著了一般端考。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上揭厚,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天却特,我揣著相機與錄音,去河邊找鬼筛圆。 笑死裂明,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的太援。 我是一名探鬼主播闽晦,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼提岔!你這毒婦竟也來了仙蛉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤碱蒙,失蹤者是張志新(化名)和其女友劉穎荠瘪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赛惩,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡哀墓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了喷兼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片篮绰。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖褒搔,靈堂內(nèi)的尸體忽然破棺而出阶牍,到底是詐尸還是另有隱情,我是刑警寧澤星瘾,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布走孽,位于F島的核電站,受9級特大地震影響琳状,放射性物質(zhì)發(fā)生泄漏磕瓷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一念逞、第九天 我趴在偏房一處隱蔽的房頂上張望困食。 院中可真熱鬧,春花似錦翎承、人聲如沸硕盹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘩例。三九已至,卻和暖如春甸各,著一層夾襖步出監(jiān)牢的瞬間垛贤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工趣倾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留聘惦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓儒恋,卻偏偏與公主長得像善绎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子诫尽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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