linux 線性表(大話資料結構)

2021-08-09 21:29:29 字數 3103 閱讀 7800

什麼是線性表:

線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的(注意,這句話只適用大部分線性表,而不是全部

1.線性表基本操作

initlist(*l): 

初始化操作,建立乙個空的線性表l。

listempty(l): 

判斷線性表是否為空表,若線性表為空,返回

true

,否則返回

false

。clearlist(*l): 

將線性表清空。

getelem(l,i,*e): 

將線性表

l中的第

i個位置元素值返回給e。

locateelem(l,e): 

l中查詢與給定值

e相等的元素,如果查詢成功,返回該元素在表中序號表示成功;否則,返回

0表示失敗。

listinsert(*l,i,e): l中第

i個位置插入新元素e。

listdelete(*l,i,*e): 

刪除線性表l中第

i個位置元素,並用

e返回其值。

listlength(l): 

返回線性表

l的元素個數。

對於不同的應用,線性表的基本操作是不同的,上述操作是最基本的。

對於實際問題中涉及的關於線性表的更複雜操作,完全可以用這些基本操作的組合來實現。

2.

有哪兩種不同的線性表

我們知道,資料結構分為邏輯結構和物理結構,邏輯結構分為集合結構、線性結構、樹形結構和圖形結構四大類。物理結構分為順序儲存結構和鏈式儲存結構。我在之前寫的《資料結構和演算法》中已經介紹過。

線性表是線性結構的一種,那麼線性表當然也有物理結構,也就是說,線性表有兩種,分別是順序結構的線性表(叫做順序表)和鏈式結構的線性表(叫做鍊錶)。

3.

順序儲存結構的線性表

順序表是指順序儲存結構的線性表,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。

順序表表現在物理記憶體中,也就是物理上的儲存方式,事實上就是在記憶體中找個初始位址,然後通過佔位的形式,把一定的記憶體空間給佔了,然後把相同資料型別的資料元素依次放在這塊空地中。注意,這塊物理記憶體的位址空間是連續的。

舉個例子,比如

c語言中的基本變數的儲存就是連續的儲存在記憶體中的,比如宣告乙個整數i,在

64位系統中整數

i在記憶體中佔

8位元組,那麼系統就會在記憶體中為這

個整型變數分配乙個長度為

8個位元組的連續的位址空間,然後把這個

i的二進位制形式從高位址向低位址儲存,長度不足時候,最高位用

0補齊。

4.

通過上面用結構體定義順序表,我們可以看出順序表的封裝需要三個屬性:1.

儲存空間的起始位置。陣列

data

的儲存位置就是線性表儲存空間的儲存位置

2.線性表的最大儲存容量。陣列長度

maxsize

3.線性表的當前長度。

length

注意:陣列的長度與線性表的當前長度是不一樣的。陣列的長度是存放線性表的儲存空間的總長度,一般初始化後不變。而線性表的當前長度是線性表中元素的個數,是會改變的。

5.

順序表優缺點

線性表的順序儲存結構,在存、讀取資料時,不管是在哪個位置,時間複雜度都是

o(1)

。而在插入或者刪除時,時間複雜度都是

o(n)

。這也就是線性表的順序儲存結構比較適合訪問資料,不適合經常插入和刪除資料的應用。

優點:1.

無需為了表示表中元素之間的邏輯關係而增加額外的儲存空間(相對於鏈式儲存而言)。

2.可以快速的訪問表中任意位置的元素。

缺點:1.

插入和刪除操作需要移動大量的元素。

2.當線性表長度變化較大時,難以確定儲存空間的容量。

3.容易造成儲存空間的「碎片

」(因為線性表的順序儲存結構申請的記憶體空間都以連續的,如果因為某些操作(比如刪除操作)導致某個部分出現了一小塊的不連續記憶體空間,因為這一小塊記憶體空間太小不能夠再次被利用

/分配,那麼就造成了記憶體浪費,也就是「碎片

」)6.

鏈式儲存結構的線性表

前面我們講的線性表的順序儲存結構,它最大的缺點就是插入和刪除時需要移動大量元素,這顯然就需要耗費時間。

那我們能不能針對這個缺陷或者說遺憾提出解決的方法呢?要解決這個問題,我們就得考慮一下導致這個問題的原因!

為什麼當插入和刪除時,就要移動大量的元素?

原因就在於相鄰兩元素的儲存位置也具有鄰居關係,它們在記憶體中的位置是緊挨著的,中間沒有間隙,當然就無法快速插入和刪除。

線性表的鏈式儲存結構的特點是用一組任意的儲存單元儲存線性表的資料元素,這組儲存單元可以存在記憶體中未被占用的任意位置。

也就是說,鏈式儲存結構的線性表由乙個(可以使零)或者多個結點(

node

)組成。每個節點內部又分為資料域和指標域(鏈)。資料域儲存了資料元素的資訊。指標域儲存了當前結點指向的直接後繼的指標位址。

因為每個結點只包含乙個指標域,所以叫做單鏈表。顧名思義,當然還有雙鏈表。

7.

什麼是指標域

鏈式儲存結構中,除了要儲存資料元素資訊外,還要儲存它的後繼元素的儲存位址(指標)。

也就是說除了儲存其本身的資訊外,還需儲存乙個指示其直接後繼的儲存位置的資訊。

我們把儲存資料元素資訊的域稱為資料域,把儲存直接後繼位置的域稱為指標域。

8.

什麼是單鏈表

指標域中儲存的資訊稱為指標或鏈。

這兩部分資訊組成資料元素稱為儲存映像,或稱為結點

(node)。n

個結點鏈結成乙個鍊錶,即為線性表

(a1, a2, a3, …, an)

的鏈式儲存結構。

因為此鍊錶的每個結點中只包含乙個指標域,所以叫做單鏈表。

《大話資料結構》 線性表

created by pengxiangzhou on 2021 1 24.include ifndef c ds linear list h define c ds linear list h endif c ds linear list h 線性表 順序儲存結構 順序儲存結構的三個屬性 陣列da...

大話資料結構 線性表

線性表是零個或多個資料元素的有限序列。線性表的抽象資料型別定義如下 adt 線性表 list data 線性表的資料物件集合為,每個元素的型別均為datatype。其中,除第乙個元素a1外,每乙個元素有且只有乙個直接前驅元素,除了最後乙個元素an外,每乙個元素有且只有乙個直接後繼元素。資料元素之間的...

大話資料結構 線性表 2

線性表的順序儲存結構最大的缺點是插入和刪除時需要移動大量資料,這顯然就需要消耗時間。本節討論的鏈式儲存結構可以很好滴解決這個問題。線性表的鏈式儲存結構的特點是用一組任意的儲存單元儲存線性表的資料元素,這些儲存單元可以使連續的,也可以是不連續的。這就意味著,這些資料元素可以存在記憶體未被占用的任意位置...