重學數據結構(二):線性表

線性表(List):是零個或多個數據元素的有限序列,它是最常用且最簡單的一種數據結構商佛。

前提說明喉钢,本篇文章只會介紹線性表相關概念的理論知識,對線性表操作的算法實現良姆,會單獨用一篇文章來介紹肠虽,現已完成,感興趣請戳:線性表的算法實現之JS

基本概念和特點

線性表元素的個數 n (n ≥ 0)定義為線性表的長度玛追,當 n = 0 時税课,稱為空表。

在較復雜的線性表中痊剖,一個數據元素可以由若干個數據項(item)組成韩玩,在這種情況下,常把數據元素稱為記錄(record)陆馁,含有大量記錄的線性表又稱為文件(file)啸如。

線性表的常見操作有:創(chuàng)建和初始化、重置為空表氮惯、插入數據叮雳、刪除數據、合并線性表等妇汗。

當數據元素為非空有限集合時帘不,線性結構具有如下特點:

  • 存在唯一的一個被稱為“第一個”的數據元素
  • 存在唯一的一個被稱為“最后一個”的數據元素
  • 除第一個之外,集合中的每個數據元素均只有一個前驅
  • 除最后一個之外杨箭,集合中的每個數據元素均只有一個后繼

順序存儲結構

線性表的順序存儲結構寞焙,指的是用一段地址連續(xù)的存儲單元依次存儲線性表的數據元素,它的特點是邏輯關系上相鄰的兩個元素在物理位置上也相鄰互婿。由于線性表的每個數據元素的類型都相同捣郊,所以我們常用一維數組來實現順序存儲結構。

相關概念

通過以下三個屬性來描述順序存儲結構:

  • 存儲空間的起始位置:即數組 data慈参,它的存儲位置就是存儲空間的存儲位置
  • 線性表的最大存儲容量:數組長度 MaxSize
  • 線性表的當前長度:Length

要注意區(qū)分數據長度線性表長度這兩個概念呛牲,數據的長度即數組的長度,是存放線性表的存儲空間的長度驮配,存儲分配后這個量就一般是不變的娘扩;而線性表長度是線性表中數據元素的個數着茸,是會隨著線性表的插入和刪除操作進行相應變化的。所以琐旁,線性表的長度應該小于等于數組長度涮阔。

存儲器中每個存儲單元都有自己的編號,這個編號稱之為地址灰殴。對于每個數據元素來說敬特,不管它是整型、實型還是字符型牺陶,它都是需要占用一定的存儲單元空間伟阔,我們假設占用的都是 c 個存儲單元,那么線性表中第 i+1 個數據元素的存儲位置和第 i 個數據元素的存儲位置滿足下列關系:

LOC(ai+1) = LOC(ai) + c

其中 LOC 表示的是獲得存儲位置的函數义图。由此我們可得對于第 i 個數據元素 ai的存儲位置可以由a1推算得出

LOC(ai) = LOC(a1) + (i - 1) * c

通過這個公式减俏,我們可以隨時算出線性表中任意位置的地址,也可以算出對每個線性表位置的存入或取出碱工,算法復雜度都是一樣的娃承,為 O(1),我們把具有這一特點的存儲結構稱為隨機存取結構怕篷。

優(yōu)缺點

優(yōu)點:

  • 無須為表示表中元素之間的邏輯關系而增加額外的存儲空間
  • 可以快速地存取表中任一位置的元素

缺點:

  • 插入和刪除操作需要移動大量元素
  • 當線性表長度變化大時历筝,難以確定存儲空間的容量
  • 造成存儲空間的“碎片”

鏈式存儲結構

鏈式存儲結構的特點是用一組任意的存儲單元存儲線性表的數據元素,這組存儲單元可以是連續(xù)的廊谓,也可以是不連續(xù)的梳猪,這意味著這些數據元素可以存在內存未被占用的任意位置。

線性鏈表

為了表示每個數據元素 ai 與其直接后繼數據元素 ai+1 之間的邏輯關系蒸痹,對數據元素 ai 來說春弥,除了存儲其本身的信息之外,還需要存儲一個指示其直接后繼的信息(即直接后繼的存儲位置)叠荠。我們把存儲數據元素信息的域稱為數據域匿沛,把存儲直接后繼位置的域稱為指針域。指針域中存儲的信息稱做指針榛鼎。這兩部分信息組成數據元素 ai 的存儲映像逃呼,稱為結點(Node)。

n 個結點(ai的存儲映像)鏈結成一個鏈表者娱,即為線性表的鏈式存儲結構抡笼,因為此鏈表的每個結點中只包含一個指針域,我們又稱之為線性鏈表單鏈表黄鳍。單鏈表正是通過每個結點的指針域將線性表的數據元素按其邏輯次序鏈接在一起推姻。

我們把鏈接中第一個結點的指針(即存儲位置)叫做頭指針;最后一個結點的指針為“空”(通常用 NULL 或 ^ 符號表示)际起。

有時我們?yōu)榱朔奖銓︽湵磉M行操作拾碌,會在單鏈表的第一個結點前附設一個結點吐葱,稱為頭結點街望,頭結點的數據域可以不存儲任何信息校翔,也可以存儲如線性表的長度等附加信息,頭結點的指針域存儲指向第一個結點的指針灾前。

注意區(qū)別頭指針和頭結點:
頭指針:

  • 頭指針是指鏈表指向第一個結點的指針防症,若鏈表有頭結點,則是指向頭結點的指針
  • 頭指針具有標識作用哎甲,所以常用頭指針冠以鏈表的名字
  • 無論鏈表是否為空蔫敲,頭指針均不為空,頭指針是鏈表的必要元素

頭結點:

  • 頭結點是為了操作的統一和方便而設立的炭玫,放在第一元素的結點之前奈嘿,其數據域一般無意義(也可存放鏈表的長度)
  • 有了頭結點,對在第一元素結點前插入結點和刪除第一結點吞加,其操作與其他結點的操作就統一了
  • 頭結點不一定是鏈表必須元素

靜態(tài)鏈表

對于早期的編程高級語言裙犹,如:Basic、Fortran 由于沒有指針衔憨,那我們該怎么描述它們的單線表呢叶圃?我們的做法是用數組來代替指針,把這種用數組描述的鏈表稱為靜態(tài)鏈表践图,這種描述方法還有起名叫做游標實現法掺冠。

我們對數組的第一個和最后一個元素作為特殊元素處理,不存數據码党。

循環(huán)鏈表

將單鏈表中終端結點的指針端由空指針改為指向頭結點德崭,就使整個單鏈表行程一個環(huán),這種頭尾相接的單鏈表稱為單循環(huán)鏈表揖盘,簡稱循環(huán)鏈表(circular linked list)眉厨。

雙向鏈表

雙向鏈表(double linked list)是在單鏈表的每個結點中,再設置一個指向其前驅結點的指針域扣讼。所以在雙向鏈表中的結點都有兩個指針域缺猛,一個指向直接后繼,一個指向直接前驅椭符。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末荔燎,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子销钝,更是在濱河造成了極大的恐慌有咨,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒸健,死亡現場離奇詭異座享,居然都是意外死亡婉商,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門渣叛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丈秩,“玉大人,你說我怎么就攤上這事淳衙∧⒒啵” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵箫攀,是天一觀的道長肠牲。 經常有香客問我,道長靴跛,這世上最難降的妖魔是什么缀雳? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮梢睛,結果婚禮上肥印,老公的妹妹穿的比我還像新娘。我一直安慰自己扬绪,他們只是感情好竖独,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挤牛,像睡著了一般莹痢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上墓赴,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天竞膳,我揣著相機與錄音,去河邊找鬼诫硕。 笑死坦辟,一個胖子當著我的面吹牛,可吹牛的內容都是我干的章办。 我是一名探鬼主播锉走,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼藕届!你這毒婦竟也來了挪蹭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤休偶,失蹤者是張志新(化名)和其女友劉穎梁厉,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體踏兜,經...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡词顾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年八秃,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肉盹。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡昔驱,死狀恐怖,靈堂內的尸體忽然破棺而出垮媒,到底是詐尸還是另有隱情舍悯,我是刑警寧澤航棱,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布睡雇,位于F島的核電站,受9級特大地震影響饮醇,放射性物質發(fā)生泄漏它抱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一朴艰、第九天 我趴在偏房一處隱蔽的房頂上張望观蓄。 院中可真熱鬧,春花似錦祠墅、人聲如沸侮穿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亲茅。三九已至,卻和暖如春狗准,著一層夾襖步出監(jiān)牢的瞬間克锣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工腔长, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留袭祟,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓捞附,卻偏偏與公主長得像巾乳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸟召,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355