第二節 線性表 順序表 鍊錶 逐個擊破

2022-02-19 15:29:51 字數 2860 閱讀 4313

一. 線性表

1. 前言

線性表,全名為線性儲存結構。使用線性表儲存資料的方式可以這樣理解,即 「 把所有(一對一邏輯關係的)資料用一根線兒串

起來,再儲存到物理空間中 」。這根線有兩種串聯形式,如下圖,即順序儲存(集中存放)和鏈式儲存(分散存放)。

圖 3a) 是多數人想到的儲存方式,而圖 3b) 卻少有人想到。我們知道,資料儲存的成功與否,取決於是否能將資料完整地復原成它本來的樣子。如果把圖 3a) 和圖 3b) 線的一頭扯起,你會發現資料的位置依舊沒有發生改變。因此可以認定,這兩種儲存方式都是正確的。

引出線性表的定義:

將具有「一對一」關係的資料「線性」地儲存到物理空間中,這種儲存結構就稱為線性儲存結構(簡稱線性表)。

ps:使用線性表儲存的資料,如同向陣列

中儲存資料那樣,要求資料型別必須一致,也就是說,線性表儲存的資料,要麼全不都是整形,要麼全部都是字串。一半是整形,另一半是字串的一組資料無法使用線性表儲存。

2. 順序結構和鏈式結構

線性表儲存資料可細分為以下 2 種:

如圖 3a) 所示,將資料依次儲存在連續的整塊物理空間中,這種儲存結構稱為順序儲存結構(簡稱順序表

);如圖 3b) 所示,資料分散的儲存在物理空間中,通過一根線儲存著它們之間的邏輯關係,這種儲存結構稱為鏈式儲存結構(簡稱鍊錶

);也就是說,線性表儲存結構可細分為順序儲存結構和鏈式儲存結構。

3. 前驅和後繼

資料結構中,一組資料中的每個個體被稱為「資料元素」(簡稱「元素」)。對於具有「一對一」邏輯關係的資料,我們一直在用「某一元素的左側(前邊)或右側(後邊)」這樣不專業的詞,其實線性表中有更準確的術語:

以圖 1 資料中的元素 3 來說,它的直接前驅是 2 ,此元素的前驅元素有 2 個,分別是 1 和 2;同理,此元素的直接後繼是 4 ,後繼元素也有 2 個,分別是 4 和 5。如圖下圖所示:

二. 順序表

1. 簡介

順序表,全名"順序儲存結構",是線性表的一種。我們知道線性表是用來儲存邏輯關係為 "一對一" 的資料,順表也不例外。順序表儲存資料時,會提前申請一整塊足夠大小的物理空間,然後將資料依次儲存起來,儲存時做到資料元素之間不留一絲縫隙。

例如,使用順序表儲存集合 ,資料最終的儲存狀態如下圖:

由此我們可以得出,將「具有 '一對一' 邏輯關係的資料按照次序連續儲存到一整塊物理空間上」的儲存結構就是順序儲存結構。

順序表儲存資料同

陣列非常接近。其實,順序表儲存資料使用的就是陣列。

三. 鍊錶

1. 簡介

鍊錶,別名鏈式儲存結構 或 單鏈表,也是線性表的一種,用於儲存邏輯關係為 "一對一"的資料。與順序表

不同,鍊錶不限制資料的物理儲存狀態,換句話說,使用鍊錶儲存的資料元素,其物理儲存位置是隨機的。

例如,用鍊錶儲存 ,資料的物理儲存空間如下:

上圖根本無法體現出各資料之間的邏輯關係,對此,鍊錶的解決方案是,每個資料元素在儲存時都配備乙個指標,用於指向自己的直接後繼元素。如下圖:

由此我們得出:資料元素隨機儲存,並通過指標表示資料之間邏輯關係的儲存結構就是鏈式儲存結構

2. 鍊錶的節點

鍊錶中每個資料的儲存都由以下兩部分組成:

(1). 資料元素本身,其所在的區域稱為資料域

(2). 指向直接後繼元素的指標,其所在的區域稱為指標域; 如下圖所示:

鍊錶實際儲存的是乙個乙個節點,真正的資料元素包含在這些節點中,如下圖所示:

3. 頭節點、頭指標和首元節點

乙個完整的鍊錶需要由以下幾部分構成:

(1).頭指標:乙個普通的指標,它的特點是永遠指向鍊錶第乙個節點的位置。很明顯,頭指標用於指明鍊錶的位置,便於後期找到鍊錶並使用表中的資料;

(2).節點:鍊錶中的節點又細分為頭節點、首元節點和其他節點:

a.頭節點:其實就是乙個不存任何資料的空節點,通常作為鍊錶的第乙個節點。對於鍊錶來說,頭節點不是必須的,它的作用只是為了方便解決某些實際問題;

b.首元節點:由於頭節點(也就是空節點)的緣故,鍊錶中稱第乙個存有資料的節點為首元節點。首元節點只是對鍊錶中第乙個存有資料節點的乙個稱謂,沒有實際意義;

c.其他節點:鍊錶中其他的節點;

因此,乙個儲存 的完整鍊錶結構為:

注:鍊錶中有頭節點時,頭指標指向頭節點;反之,若煉表中沒有頭節點,則頭指標指向首元節點。

!

線性表(順序表 鍊錶)

在程式中,經常需要將一組 通常是同為某個型別的 資料元素作為整體管理和使用,需要建立這種元素組,用變數記錄他們傳進傳出函式等。一組資料中包含的元素個數可能發生變化。對於這種需求,最簡單的解決方案就是將這樣一組元素看成乙個序列,用元素在序列裡的位置和順序,表示實際應用中的某種有意義的資訊,或者表示資料...

C語言資料結構,第二節 線性表的連式儲存

一 思路 針對線性表的鏈式儲存,其實我們最主要的是要考慮如何將鍊錶節點和業務節點如何合在一起,意思就是我們的鍊錶的api函式,操作的是鍊錶節點,而我們如何將業務節點和鍊錶節點相繫結,這樣的話,這樣的話我們操作鍊錶節點,其實就是操作的業務節點。二.通用鍊錶 鍊錶操作還是只操作鍊錶節點,但是鍊錶節點存在...

第二章 線性表 順序表

資料元素的位址計算公式 l ai l a1 i 1 c c為乙個資料元素所佔的儲存量。順序表結構圖。順序表的靜態儲存結構。define maxsize 80 typedef structsqlisttp 靜態線性表的初始化 status initlist sqlisttp l 靜態順序表上實現插入操...