一、在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)中,數(shù)據(jù)之間的關(guān)系的體現(xiàn)
在鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)中,數(shù)據(jù)之間的關(guān)系是通過(guò)指針(結(jié)點(diǎn)中的指針)決定的。鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),又叫鏈接存儲(chǔ)。結(jié)構(gòu)。在計(jì)算機(jī)中用一組任意的存儲(chǔ)單元存儲(chǔ)線性表的數(shù)據(jù)元素。
一般在計(jì)算機(jī)的硬盤中,文件都是鏈?zhǔn)酱鎯?chǔ)的。我們知道,多個(gè)扇區(qū)組成一個(gè)簇,簇是計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)的基本單位。而一個(gè)文件是存儲(chǔ)在多個(gè)在空間上也許并不相連的簇中的,這就是鏈?zhǔn)酱鎯?chǔ)。
但是為了能夠讀取出這個(gè)文件,計(jì)算機(jī)會(huì)在該文件名列前茅部分的尾部寫上第二部分所在的簇號(hào)。第二部分的尾部又寫上第三部分,以此類推,最后一部分寫上一段代碼,表示這是該文件的最后一部分。值得一提的是,高簇號(hào)在后。文件所占簇可認(rèn)為是隨機(jī)分配的。
延伸閱讀:
二、鏈表數(shù)據(jù)結(jié)構(gòu)
鏈表(Linked list)是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,但是并不會(huì)按線性的順序存儲(chǔ)數(shù)據(jù),而是在每一個(gè)節(jié)點(diǎn)里存到下一個(gè)節(jié)點(diǎn)的指針(Pointer)。由于不必須按順序存儲(chǔ),鏈表在插入的時(shí)候可以達(dá)到O(1)的復(fù)雜度,比另一種線性表順序表快得多,但是查找一個(gè)節(jié)點(diǎn)或者訪問(wèn)特定編號(hào)的節(jié)點(diǎn)則需要O(n)的時(shí)間,而順序表相應(yīng)的時(shí)間復(fù)雜度分別是O(logn)和O(1)。
使用鏈表結(jié)構(gòu)可以克服數(shù)組鏈表需要預(yù)先知道數(shù)據(jù)大小的缺點(diǎn),鏈表結(jié)構(gòu)可以充分利用計(jì)算機(jī)內(nèi)存空間,實(shí)現(xiàn)靈活的內(nèi)存動(dòng)態(tài)管理。但是鏈表失去了數(shù)組隨機(jī)讀取的優(yōu)點(diǎn),同時(shí)鏈表由于增加了結(jié)點(diǎn)的指針域,空間開銷比較大。
在計(jì)算機(jī)科學(xué)中,鏈表作為一種基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)可以用來(lái)生成其它類型的數(shù)據(jù)結(jié)構(gòu)。鏈表通常由一連串節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)包含任意的實(shí)例數(shù)據(jù)(data fields)和一或兩個(gè)用來(lái)指向上一個(gè)/或下一個(gè)節(jié)點(diǎn)的位置的鏈接(”links”)。鏈表最明顯的好處就是,常規(guī)數(shù)組排列關(guān)聯(lián)項(xiàng)目的方式可能不同于這些數(shù)據(jù)項(xiàng)目在記憶體或磁盤上順序,數(shù)據(jù)的訪問(wèn)往往要在不同的排列順序中轉(zhuǎn)換。而鏈表是一種自我指示數(shù)據(jù)類型,因?yàn)樗赶蛄硪粋€(gè)相同類型的數(shù)據(jù)的指針(鏈接)。鏈表允許插入和移除表上任意位置上的節(jié)點(diǎn),但是不允許隨機(jī)存取。鏈表有很多種不同的類型:?jiǎn)蜗蜴湵?,雙向鏈表以及循環(huán)鏈表。