更新時間:2020-12-03 17:13:31 來源:動力節點 瀏覽3857次
鏈式存儲結構,又叫鏈接存儲結構。在計算機中用一組任意的存儲單元存儲線性表的數據元素。鏈式存儲結構不要求邏輯上相鄰的元素在物理位置上也相鄰,因此它沒有順序存儲結構所具有的弱點,但也同時失去了順序表可隨機存取的優點。
鏈式存儲結構一般有單鏈表、靜態鏈表、循環鏈表和雙向鏈表。下面為大家一一介紹:
1.單鏈表
n個結點鏈結成一個鏈表,即為線性表的鏈式存儲結構,因為此鏈表的每個結點中只包含一個指針域,所以叫做單鏈表,單鏈表是通過每個結點的指針域將線性表的數據元素按其邏輯次序鏈接在一起。
有的鏈表是帶有頭結點的,有的是不包含頭結點的,頭節點的數據域可以不存儲任何信息,可以存儲線性表長度等附加信息,頭節點的 指針域存儲指向第一個結點的指針。當鏈表是帶有頭結點的時候,就相當于火車頭一樣的存在,只是用來表面列車順序開始的方向,并不乘坐客人。(鏈表一般都是包含頭結點的)
帶頭結點的單鏈表中,頭指針head指向頭結點,頭結點的數據域不包含任何信息,從頭結點的后繼結點開始存儲數據信息。頭指針始終不等于NULL(指針是指指向下一個元素的的信息,當為NULL時,即不指向任何元素),head->next等于NULL的時候,鏈表為空。
不帶頭結點的單鏈表中的頭指針head直接指向開始結點,當head等于NULL(head->=NULL)的時候,鏈表為空。
鏈表中整個鏈表的存取就必須從頭指針開始進行,之后的每個結點就是上一個結點的后繼指針指向的位置,最后一個結點(終端結點)的指針為空,通常用NULL或^表示。
2.靜態鏈表
前面的單鏈表是用的指針,但是有的編程語言是沒有指針這個功能的,那怎么?聰明的人總是有,有人想出了用數組來代替指針,來描述單鏈表,讓每個數組的元素都由兩個數據域組成,數組的每個下標都對應兩個數據域,一個用來存放數據元素,一個用來存放next指針。我們把這種用數組描述的鏈表叫做靜態鏈表。
3.循環鏈表
將單鏈表中終端結點的指針端由空指針改為指向頭結點,就使整個單鏈表形成一個環,這種頭尾相接的單鏈表稱為單循環鏈表,簡稱循環鏈表。
4.雙向鏈表
在單鏈表的基礎上,再在每個結點中設置一個指向其前驅結點的指針域,這樣一個結點既可以指向它的前面又可以指向它的下一個,我們把這種鏈表稱為雙向鏈表。
結點是內存中一片由用戶分配的存儲空間,只有一個地址用來表示它的存在,沒有顯式的名稱,因此我們會在分配鏈表結點空間的時候,同時定義一個指針,來存儲這片空間的地址(這個過程通俗的講叫指針指向結點),并且常用這個指針的名稱來作為結點的名稱。
鏈式存儲結構的出現實際上是為了改善順序存儲結構的缺點,邏輯上相鄰的節點物理上不必相鄰。同時,鏈式存儲結構比順序存儲結構的存儲密度小(鏈式存儲結構中每個結點都由數據域與指針域兩部分組成,相比順序存儲結構增加了存儲空間)。本文對順序存儲結構就不過多介紹,感興趣的小伙伴可以觀看本站的數據結構和算法教程自主學習。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習