點(diǎn)擊進(jìn)入:2011計(jì)算機(jī)等考二級(jí)公共基礎(chǔ)知識(shí)講義匯總>>
1.5 線性鏈表(學(xué)吧學(xué)吧獨(dú)家稿件)
1、線性表順序存儲(chǔ)的缺點(diǎn)(學(xué)吧學(xué)吧獨(dú)家稿件):(1)插入或刪除的運(yùn)算效率很低。在順序存儲(chǔ)的線性表中,插入或刪除數(shù)據(jù)元素時(shí)需要移動(dòng)大量的數(shù)據(jù)元素;(2)線性表的順序存儲(chǔ)結(jié)構(gòu)下,線性表的存儲(chǔ)空間不便于擴(kuò)充;(3)線性表的順序存儲(chǔ)結(jié)構(gòu)不便于對(duì)存儲(chǔ)空間的動(dòng)態(tài)分配。
2、線性鏈表:線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)稱為線性鏈表,是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接來實(shí)現(xiàn)的。因此,在鏈?zhǔn)酱鎯?chǔ)方式中,每個(gè)結(jié)點(diǎn)由兩部分組成:一部分用于存放數(shù)據(jù)元素的值,稱為數(shù)據(jù)域;另一部分用于存放指針,稱為指針域,用于指向該結(jié)點(diǎn)的前一個(gè)或后一個(gè)結(jié)點(diǎn)(即前件或后件),如下圖所示:
線性鏈表分為單鏈表、雙向鏈表和循環(huán)鏈表三種類型。
在單鏈表中,每一個(gè)結(jié)點(diǎn)只有一個(gè)指針域,由這個(gè)指針只能找到其后件結(jié)點(diǎn),而不能找到其前件結(jié)點(diǎn)。因此,在某些應(yīng)用中,對(duì)于線性鏈表中的每個(gè)結(jié)點(diǎn)設(shè)置兩個(gè)指針,一個(gè)稱為左指針,指向其前件結(jié)點(diǎn);另一個(gè)稱為右指針,指向其后件結(jié)點(diǎn),這種鏈表稱為雙向鏈表,如下圖所示:
3、線性鏈表的基本運(yùn)算
(1)在線性鏈表中包含指定元素的結(jié)點(diǎn)之前插入一個(gè)新元素。
*:在線性鏈表中插入元素時(shí),不需要移動(dòng)數(shù)據(jù)元素,只需要修改相關(guān)結(jié)點(diǎn)指針即可,也不會(huì)出現(xiàn)“上溢[注釋1] ”現(xiàn)象(學(xué)吧學(xué)吧獨(dú)家稿件)。
(2)在線性鏈表中刪除包含指定元素的結(jié)點(diǎn)。
*:在線性鏈表中刪除元素時(shí),也不需要移動(dòng)數(shù)據(jù)元素,只需要修改相關(guān)結(jié)點(diǎn)指針即可。
(3)將兩個(gè)線性鏈表按要求合并成一個(gè)線性鏈表。
(4)將一個(gè)線性鏈表按要求進(jìn)行分解。
(5)逆轉(zhuǎn)線性鏈表。
(6)復(fù)制線性鏈表。
(7)線性鏈表的排序。
(8)線性鏈表的查找。
*:線性鏈表不能隨機(jī)存取[注釋2] 。
4、循環(huán)鏈表及其基本運(yùn)算
在線性鏈表中,其插入與刪除的運(yùn)算雖然比較方便,但還存在一個(gè)問題,在運(yùn)算過程中對(duì)于空表和對(duì)第一個(gè)結(jié)點(diǎn)的處理必須單獨(dú)考慮,使空表與非空表的運(yùn)算不統(tǒng)一。為了克服線性鏈表的這個(gè)缺點(diǎn),可以采用另一種鏈接方式,即循環(huán)鏈表。
與前面所討論的線性鏈表相比,循環(huán)鏈表具有以下兩個(gè)特點(diǎn):1)在鏈表中增加了一個(gè)表頭結(jié)點(diǎn),其數(shù)據(jù)域?yàn)槿我饣蛘吒鶕?jù)需要來設(shè)置,指針域指向線性表的第一個(gè)元素的結(jié)點(diǎn),而循環(huán)鏈表的頭指針指向表頭結(jié)點(diǎn);2)循環(huán)鏈表中最后一個(gè)結(jié)點(diǎn)的指針域不是空,而是指向表頭結(jié)點(diǎn)。即在循環(huán)鏈表中,所有結(jié)點(diǎn)的指針構(gòu)成了一個(gè)環(huán)狀鏈。
下圖a是一個(gè)非空的循環(huán)鏈表,圖b是一個(gè)空的循環(huán)鏈表:
循環(huán)鏈表的優(yōu)點(diǎn)主要體現(xiàn)在兩個(gè)方面:一是在循環(huán)鏈表中,只要指出表中任何一個(gè)結(jié)點(diǎn)的位置,就可以從它出發(fā)訪問到表中其他所有的結(jié)點(diǎn),而線性單鏈表做不到這一點(diǎn);二是由于在循環(huán)鏈表中設(shè)置了一個(gè)表頭結(jié)點(diǎn),在任何情況下,循環(huán)鏈表中至少有一個(gè)結(jié)點(diǎn)存在,從而使空表與非空表的運(yùn)算統(tǒng)一。
*:循環(huán)鏈表是在單鏈表的基礎(chǔ)上增加了一個(gè)表頭結(jié)點(diǎn),其插入和刪除運(yùn)算與單鏈表相同。但它可以從任一結(jié)點(diǎn)出發(fā)來訪問表中其他所有結(jié)點(diǎn),并實(shí)現(xiàn)空表與非空表的運(yùn)算的統(tǒng)一。
注釋1:當(dāng)為一個(gè)線性表分配順序存儲(chǔ)結(jié)構(gòu)后,如果出現(xiàn)線性表的存儲(chǔ)空間已滿,但還需要插入新的元素時(shí),就會(huì)發(fā)生“上溢”現(xiàn)象。
注釋2:在鏈表中,即使知道被訪問結(jié)點(diǎn)的序號(hào)i,也不能像順序表中那樣直接按序號(hào)i訪問結(jié)點(diǎn),而只能從鏈表的頭指針出發(fā),順著鏈域逐個(gè)結(jié)點(diǎn)往下搜索,直至搜索到第i個(gè)結(jié)點(diǎn)為止。因此,鏈表不是隨機(jī)存儲(chǔ)結(jié)構(gòu)。
相關(guān)推薦:
2011計(jì)算機(jī)等考二級(jí)公共基礎(chǔ)知識(shí)要點(diǎn)匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |