線性表

1.基本概念

線性表(List):由零個或多個數據元素組成的有限序列。

 

2.注意:

1.線性表是一個序列。

2.0個元素構成的線性表是空表。

3.線性表中的第一個元素無前驅,最後一個元素無後繼,其他元素有且只有一個前驅和後繼。

4.線性表是有長度的,其長度就是元素個數,且線性表的元素個數是有限的,也就是說,線性表的長度是有限的。

如果用數學語言來進行定義,可如下:

若將線性表記爲(a1,…,ai-1,ai,ai+1,…an,則表中ai-1領先於ai,ai領先於ai+1,ai-1ai的直接前驅元素,ai+1ai的直接後繼元素。

 

3.線性表基本操作

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的元素個數。

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

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

 

4.有哪兩種不同的線性表

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

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

 

5.順序存儲結構的線性表

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

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

個例子,比如C語言中的基本變量的存儲就是連續的存儲在內存中的,比如聲明一個整數i,在64位系統中整數i在內存中佔8字節,那麼系統就會在內存中爲這個整型變量分配一個長度爲8個字節的連續的地址空間,然後把這個i的二進制形式從高地址向低地址存儲,長度不足時候,最高位用0補齊。

 

 

  

6.順序表優缺點

線性表的順序存儲結構,在存、讀取數據時,不管是在哪個位置,時間複雜度都是O(1)。而在插入或者刪除時,時間複雜度都是O(n)

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

優點:

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

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

缺點:

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

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

3.容易造成存儲空間的碎片”(因爲線性表的順序存儲結構申請的內存空間都以連續的,如果因爲某些操作(比如刪除操作)導致某個部分出現了一小塊的不連續內存空間,因爲這一小塊內存空間太小不能夠再次被利用/分配,那麼就造成了內存浪費,也就是碎片”)

 

7.鏈式存儲結構的線性表

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

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

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

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

線性表的鏈式存儲結構的特點是用一組任意的存儲單元存儲線性表的數據元素,這組存儲單元可以存在內存中未被佔用的任意位置。

也就是說,鏈式存儲結構的線性表由一個(可以使零)或者多個結點(Node)組成。每個節點內部又分爲數據域和指針域(鏈)。數據域存儲了數據元素的信息。指針域存儲了當前結點指向的直接後繼的指針地址。

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

 

8.什麼是指針域

鏈式存儲結構中,除了要存儲數據元素信息外,還要存儲它的後繼元素的存儲地址(指針)。

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

我們把存儲數據元素信息的域稱爲數據域,把存儲直接後繼位置的域稱爲指針域。

 

9.什麼是單鏈表

指針域中存儲的信息稱爲指針或鏈。

這兩部分信息組成數據元素稱爲存儲映像,或稱爲結點(Node)

n個結點鏈接成一個鏈表,即爲線性表(a1, a2, a3, …, an)的鏈式存儲結構。

因爲此鏈表的每個結點中只包含一個指針域,所以叫做單鏈表。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章