數(shù)據(jù)結(jié)構(gòu)之洞悉線性表

前言

線性表是數(shù)據(jù)結(jié)構(gòu)中最基本的一種數(shù)據(jù)存儲方式渴庆,深入了解線性表的特性不僅有助于更好地理解復(fù)雜數(shù)據(jù)結(jié)構(gòu)(例如棧铃芦、隊列等),還能給程序員的日常工作所需的內(nèi)功大法打下一個基礎(chǔ)襟雷。本文會從“定義”刃滓、“模型類比”、“性能評價”等多個維度對“順序存儲結(jié)構(gòu)”耸弄、“鏈?zhǔn)酱鎯Y(jié)構(gòu)”等線性表結(jié)構(gòu)進(jìn)行循序漸進(jìn)的闡述咧虎,如有錯誤或描述不清的地方, 歡迎指導(dǎo)计呈。

什么是線性表老客?

線性表即零個或多個有限元素的有限序列僚饭。

  • 線性表首先強調(diào)的是“有限”,然后是“序列性”胧砰,即每個元素從前后關(guān)系上來看都有一一對應(yīng)的關(guān)系。
  • 十二星座是不是線性表呢苇瓣?答案是YES尉间,因為從“有限”和“序列性”上來考慮,十二星座的結(jié)構(gòu)是符合要求的击罪。
  • 公司的組織架構(gòu)是不是呢哲嘲?首先它滿足了“有限”特性,但由于整體結(jié)構(gòu)呈“樹狀”媳禁,而非線性眠副,所以它并不是線性表。

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

線性表結(jié)構(gòu)

非線性表結(jié)構(gòu)??????

非線性表結(jié)構(gòu)

線性表的順序存儲結(jié)構(gòu)

  • 定義
    順序存儲結(jié)構(gòu)的順序二字竣稽,是針對物理結(jié)構(gòu)而言的囱怕。使用順序存儲結(jié)構(gòu)時, 系統(tǒng)會按照給定的長度在內(nèi)存中開辟一段固定長度且連續(xù)的空間,也因此順序存儲結(jié)構(gòu)存在內(nèi)存溢出的問題毫别。

  • 模型類比
    電影院的座位就是一個線性表的順序存儲結(jié)構(gòu)娃弓,在建造的時候甲方就是根據(jù)給定的設(shè)計建造出固定數(shù)量的座位。這些座位不僅是有限的岛宦,而且是按照固定順序排序編號的台丛。如果看電影的人數(shù)超出了總座位數(shù)量,則“內(nèi)存溢出”砾肺。

  • 插入+刪除+查詢性能

    • 由于內(nèi)存地址是連續(xù)的挽霉,在進(jìn)行查詢操作時,只需要根據(jù)地址就能馬上找到對應(yīng)元素变汪,因此查詢的時間復(fù)雜度未O(1)侠坎。
    • 在進(jìn)行插入和刪除操作時,每操作一個元素疫衩,其他相關(guān)元素都要移動一下硅蹦,給即將加入的元素“讓位”, 或者“補上”被刪除的元素的位置闷煤。這個過程很好理解童芹,舉個例子,電影院有100個座位鲤拿,目前有99個觀眾坐在1號到99號的座位上假褪,突然來了一個傻逼觀眾,一定要坐到1號的座位上近顷,此時這99個觀眾都需要向后挪一個座位生音,才能給這個傻逼讓出1號座位宁否,而這個過程的時間負(fù)責(zé)度為O(n)。刪除的操作也是類似缀遍,如下圖所示慕匠。


      存儲結(jié)構(gòu)的刪除操作

線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)

鏈?zhǔn)酱鎯Y(jié)構(gòu)和順序剛好相反,它沒有固定長度域醇,而且物理空間也是不連續(xù)的台谊,因此除非系統(tǒng)的所有內(nèi)存空間都被用完了, 否則不存在內(nèi)存溢出問題譬挚。

  • 單鏈表定義
    單鏈表由有限結(jié)點組成锅铅,每個結(jié)點由數(shù)據(jù)域和指針域組成, 數(shù)據(jù)域用來保存數(shù)據(jù)减宣,指針域用來指向下一個元素盐须。


    單鏈表
  • 模型類比
    很多探寶電影都會有這么一個橋段,主角出現(xiàn)在地點一漆腌,得到一些好處贼邓,然后又得到提示前往下一個地點,到了下一個地點又得到一些好處屉凯,然后又得到提示前往再下一個地點立帖,以此類推直到找到最后的大秘寶,而這個過程中所經(jīng)過的每一個地點在物理空間上都是不連續(xù)的悠砚。以單鏈表來類比晓勇,每個地點都是一個結(jié)點,主角們得到的好處即數(shù)據(jù)灌旧,得到的提示即指針域绑咱,想要獲取下一個結(jié)點的數(shù)據(jù), 只能通過前一個指針域獲取枢泰。

  • 插入+刪除+查詢性能

    • 通過前文的類比解釋可以得出一個結(jié)果描融,使用單鏈表時,要進(jìn)行查詢操作衡蚂,只能一個結(jié)點一個結(jié)點地找下去窿克,直到找出自己要查詢的數(shù)據(jù)為止,因此單鏈表的查詢操作的時間復(fù)雜度為O(n)毛甲。
    • 而對于插入操作和刪除操作年叮,只需要在要插入的位置,重新指定前后結(jié)點的指針域的指向即可玻募,因此時間復(fù)雜度為O(1)只损,具體操作如下圖所示。
單鏈表的插入操作

結(jié)語

對比順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)后的數(shù)據(jù)操作性能后, 我們會發(fā)現(xiàn)兩者在時間復(fù)雜度上的表現(xiàn)是剛好相反的跃惫,由此也可以得出一個簡單的結(jié)論叮叹,對于長度不變且不需要頻繁進(jìn)行插入和刪除操作的數(shù)據(jù)結(jié)構(gòu),我們應(yīng)該使用順序存儲結(jié)構(gòu)爆存,而對于長度不確定且需要頻繁進(jìn)行插入和刪除操作的數(shù)據(jù)結(jié)構(gòu)蛉顽,我們應(yīng)該優(yōu)先使用鏈?zhǔn)酱鎯Y(jié)構(gòu)。兩者各有利弊终蒂,而且有不同的適用場景蜂林,應(yīng)該根據(jù)需求選擇性地使用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拇泣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子矮锈,更是在濱河造成了極大的恐慌霉翔,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苞笨,死亡現(xiàn)場離奇詭異债朵,居然都是意外死亡,警方通過查閱死者的電腦和手機瀑凝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門序芦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人粤咪,你說我怎么就攤上這事谚中。” “怎么了寥枝?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵宪塔,是天一觀的道長。 經(jīng)常有香客問我囊拜,道長某筐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任冠跷,我火速辦了婚禮南誊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蜜托。我一直安慰自己抄囚,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布盗冷。 她就那樣靜靜地躺著怠苔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仪糖。 梳的紋絲不亂的頭發(fā)上柑司,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天迫肖,我揣著相機與錄音,去河邊找鬼攒驰。 笑死蟆湖,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的玻粪。 我是一名探鬼主播隅津,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼劲室!你這毒婦竟也來了伦仍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤很洋,失蹤者是張志新(化名)和其女友劉穎充蓝,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喉磁,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡谓苟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了协怒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涝焙。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖孕暇,靈堂內(nèi)的尸體忽然破棺而出仑撞,到底是詐尸還是另有隱情,我是刑警寧澤芭商,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布派草,位于F島的核電站,受9級特大地震影響铛楣,放射性物質(zhì)發(fā)生泄漏近迁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一簸州、第九天 我趴在偏房一處隱蔽的房頂上張望鉴竭。 院中可真熱鬧,春花似錦岸浑、人聲如沸搏存。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽璧眠。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間责静,已是汗流浹背袁滥。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留灾螃,地道東北人题翻。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像腰鬼,于是被迫代替她去往敵國和親嵌赠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

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