歡迎轉(zhuǎn)載和引用,若有問(wèn)題請(qǐng)聯(lián)系 Email : lihn1011@163.com QQ:2279557541
不知不覺(jué),程序員這一行已經(jīng)做了10年了,博客換了很多個(gè)程序?qū)懥藷o(wú)數(shù)多,眼看就已經(jīng)到了而立之年,再次拿起了數(shù)據(jù)結(jié)構(gòu)的書(shū),打算靜下心來(lái)再看一遍,為了加深印象,順手寫(xiě)下些博客算是留念吧。另外該系列中參考了大量陳杰老師的《大話數(shù)據(jù)結(jié)構(gòu)》中的內(nèi)容,在此表示衷心的感謝。
話說(shuō),其實(shí)我真的不知道如何去定義什么是數(shù)據(jù)結(jié)構(gòu)。
首先我先說(shuō)下我的理解其實(shí)我理解的數(shù)據(jù)結(jié)構(gòu),就是將數(shù)據(jù)按照某種關(guān)系加以聯(lián)系,讓其能夠高效率或者簡(jiǎn)單的實(shí)現(xiàn)某種操作。
然后在引用下百度知道對(duì)數(shù)據(jù)結(jié)構(gòu)的描述
數(shù)據(jù)結(jié)構(gòu)是指相互之間存在著一種或多種關(guān)系的數(shù)據(jù)元素的集合和該集合中數(shù)據(jù)元素之間的關(guān)系組成。記為: Data_Structure=(D,R) 其中D是數(shù)據(jù)元素的集合,R是該集合中所有元素之間的關(guān)系的有限集合。
那么數(shù)據(jù)和數(shù)據(jù)之間的聯(lián)系究竟是什么呢?
數(shù)據(jù)和數(shù)據(jù)之間的聯(lián)系,其實(shí)分為兩種,一種是邏輯上的結(jié)構(gòu),一種是物理上的結(jié)構(gòu)。
集合結(jié)構(gòu)
指的是數(shù)據(jù)之間的聯(lián)系除了屬于同一個(gè)集合外,沒(méi)有其他任何的聯(lián)系,如圖所示
圖中可以看出來(lái),各個(gè)元素之間除了都在大圓圈內(nèi),就沒(méi)有別的任何聯(lián)系了。
線性結(jié)構(gòu)
真不知道該如何定義這個(gè)結(jié)構(gòu)。。。先上圖吧
看著這個(gè)圖應(yīng)該很簡(jiǎn)單,貌似就是一堆數(shù)據(jù)有序的進(jìn)行排隊(duì)的感覺(jué),有第一個(gè),也有最后一個(gè)。其實(shí)在我心里這個(gè)就是定義了,然后我再把《大話數(shù)據(jù)結(jié)構(gòu)》中定義的原文發(fā)出來(lái): “線性結(jié)構(gòu):線性結(jié)構(gòu)中的數(shù)據(jù)元素之間是一對(duì)一的關(guān)系。”
之所以叫樹(shù)形結(jié)構(gòu),就是因?yàn)檫@個(gè)圖看起來(lái)就像一顆倒著的樹(shù)。而屬性及結(jié)構(gòu)的特點(diǎn)通過(guò)圖也可以看出來(lái),其有根節(jié)點(diǎn),就是最上面那個(gè)節(jié)點(diǎn)。而各個(gè)元素之間的關(guān)系,就像是樹(shù)干與樹(shù)干上的樹(shù)枝的關(guān)系。是一種一對(duì)多的關(guān)系。
圖形結(jié)構(gòu)
圖形關(guān)系就是一個(gè)更復(fù)雜的關(guān)系了,貌似各個(gè)數(shù)據(jù)元素之間都有可能是有聯(lián)系的,是一種多對(duì)多的關(guān)系。
總結(jié)
簡(jiǎn)單的總結(jié)下各個(gè)邏輯結(jié)構(gòu)的區(qū)別就是 集合 —–元素間無(wú)關(guān)系 線性結(jié)構(gòu)—–元素間的關(guān)系為一對(duì)一的關(guān)系 樹(shù)形結(jié)構(gòu)—–元素間的關(guān)系為一對(duì)多的關(guān)系 圖形結(jié)構(gòu)—–元素間的關(guān)系為多對(duì)多的關(guān)系
物理結(jié)構(gòu)有兩種分類(lèi)方式
第一種分類(lèi)將物理結(jié)構(gòu)分為(《大話數(shù)據(jù)結(jié)構(gòu)》書(shū)中的分類(lèi)方式) 1、順序存儲(chǔ)結(jié)構(gòu) 2、鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)第二種分類(lèi)將物理結(jié)構(gòu)分為 1、順序存儲(chǔ)結(jié)構(gòu) 2、鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) 3、索引存儲(chǔ)結(jié)構(gòu) 4、散列存儲(chǔ)結(jié)構(gòu)由于我認(rèn)為其實(shí)索引存儲(chǔ)結(jié)構(gòu)和散列存儲(chǔ)結(jié)構(gòu)都屬于特殊的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),所以我這里采用第一種分類(lèi)方式。 其中 順序存儲(chǔ)結(jié)構(gòu),其實(shí)就是說(shuō)存儲(chǔ)的數(shù)據(jù)在計(jì)算機(jī)內(nèi)存中是連續(xù)且有順序的排列的,這點(diǎn)涉及到一些內(nèi)存管理的內(nèi)容,如果你了解C/C++的話,應(yīng)該對(duì)數(shù)據(jù)在內(nèi)存結(jié)構(gòu)中的排列方式會(huì)有比較深的理解。其他語(yǔ)言的話,只要簡(jiǎn)單理解下應(yīng)該就沒(méi)有問(wèn)題了。 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),就是說(shuō)存儲(chǔ)的數(shù)據(jù)在內(nèi)存上不是連續(xù)的,每個(gè)數(shù)據(jù)通過(guò)一個(gè)“鏈”將各個(gè)數(shù)據(jù)聯(lián)系起來(lái),所謂的“鏈”在C/C++中比較常見(jiàn)的就是使用指針。
《大話數(shù)據(jù)結(jié)構(gòu)》 陳杰
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注