線性表的定義
提到線性這個詞,並不陌生,在 數據結構的基本概念 中學過線性的邏輯結構。線性邏輯結構是一對一關系,結點之間排成了一列或者一行,所以說線性表也是一種邏輯關系。有了對線性表的認知,那么來看一下它的概念:
線性表是具有相同類型的 n (n>=0) 個元素的有限序列,其中 n 為表長,當 n=0 時,該表為空表。
為什么要相同類型?計算機在處理大量數據的時候,把相同的數據元素稱作為數據對象。往往要處理相同的數據元素,也就處理一種數據對象。不會把音頻和圖片雜糅到一起進行處理。也不會把抽象事物,比如說人和汽車組合到一起進行處理。因為這樣沒有意義,也沒有高的效率。
對於相同類型,在接下來所學到的所有的數據結構中都有這樣的要求。因為具有相同類型的數據結構,它在解決實際問題,實現算法時,才更加的有意義。其次,對於這個類型的范圍,它的定義其實並不狹隘,並不僅僅局限於我們常見的類型,比如說整型、浮點型這樣的類型。對於從實際生活中抽象出來的類型,比如說一本書、一個人也是可以作為一個元素的。它與 C++ 中的面向對象的類比較相似。
除了相同類型,定義中還有一個比較重要的點,那就是是有限序列。什么是有限?就是說明該線性表的長度是有限的,因為計算機無法處理無限多的數據。第二個是序列,根據下面的表示方法可以發現,線性表中每一個元素都是有序號的,序列的意思就是有序號的一種排列。這就是在線性表定義中比較重要的兩個點。
若 L 命名為線性表,則一般表示為:
在 L 當中,線性表的每一個元素都具有相同類型,都是屬於同一個數據對象的數據元素,分別是 a1、a2 一直到 an 。可以發現,對於所有的元素它都是有序號的。
那么在表中,第一個元素,稱它為表頭元素,最后一個元素稱它為表尾元素。除了這樣,該線性表還有一些其他的邏輯關系。
在線性表中,每一個元素除了表頭元素,它都有一個前驅結點。也就是 ai+1 的前驅結點,即是 ai 。同樣在表中,每一個元素除了表尾元素,它都有一個后繼結點。也就是 ai 的后繼結點 ai+1 ,這就是線性表在定義上的所有知識點。根據定義,總結一下線性表的特點:
- 表中元素個數有限
- 表中元素具有邏輯上的順序性,在序列中各個元素排序有其先后次序
- 表中元素都是數據元素,每個元素都是單個元素
- 表中元素的數據類型都相同,這意味着每個元素占有相同大小的存儲空間
- 表中元素具有抽象性,即討論元素間一對一的邏輯關系,而不考慮元素究竟表示的內容
- 線性表是一種邏輯結構,表示元素之間一對一相鄰的關系
線性表的基本操作
線性表的九種基本操作:
首先對於任何一種數據結構,都有一個創建它的方法,也有一個銷毀它的方法。在線性表中創建它的方法叫做 InitList
,傳入的參數是一個線性表,它的作用是初始化這個線性表,構造一個空的線性表。注意傳入的參數是引用類型。第二個就是銷毀的操作,叫 DestroyList
,傳入的參數依舊是一個引用類型的線性表。它是銷毀這個線性表,並釋放線性表所占用的內存空間。注意針對不同的存儲結構而言,它們具體的實現方式可能有非常大的差異。
接下來有兩種查找操作,一種是按值查找,另一種是按位查找。首先是按值查找操作,它叫做 LocateElem
,Elem 指的是元素。傳入的參數是線性表以及一個值 e 來表示,它的意思是在表 L 中查找具有給定關鍵字值的元素,也就是找到該表中值是 e 的元素。注意,往往查找的過程當中,返回的值是第一個查找到的元素,也就是說假如在該表中有多個符合該值的元素,只返回查找的第一個。
接下來看按位查找,它叫 GetElem
,傳入的參數依舊是線性表,但是第二個參數有所不同,它是一個 i 。這個 i 表示獲取表中第 i 個位置的元素。因為線性表每一個元素都是有序號的,返回的就是序號是 i 的這個元素的值。還有一點需要注意的就是,按位查找這個輸入的參數 i ,一定是在 0 到表長的大小之間,因為不可能找到比表長大的位置元素的值。
接下來看有關線性表插入和刪除的操作。首先來看插入的操作,叫 ListInsert
,它的傳入參數有三個,第一個是線性表的引用,這里傳引用類型同樣是為了達到實現更方便。第二個傳入參數是 i ,也就是在第 i 個位置進行插入。第三個傳入的參數是插入的元素 e 。要注意的一點就是在所有線性表的插入操作中,所有的插入都是前插,也就是第 i 個位置的前一個位置進行插入,這是一個小的規定。
接下來看刪除操作。刪除操作叫 ListDelete
,它傳入的參數也是三種,第一個是線性表的引用,第二個表示要刪除的第 i 個位置的元素,最后一個參數是值的引用,通過該引用返回該元素的值。插入與刪除操作同樣要注意,這個傳入參數 i 一定也在表長范圍之內,一旦超過表長,插入和刪除操作都沒有意義了。
然后看輸出操作。輸出操作很簡單,就是按前后順序輸出線性表 L 的所有元素的值。
最后還有兩個操作,一個是判空操作,判斷該表是否為空表,若是空表則返回 TRUE,否則返回 FALSE。另一個是求表長,求表長的意思就是返回線性表的長度,即 L 中數據元素的個數。
以上就是線性表的基本操作。