提到線性這個詞,並不陌生,在 數據結構的基本概念 中學過線性的邏輯結構。線性邏輯結構是一對一關係,結點之間排成了一列或者一行,因此說線性表也是一種邏輯關係。有了對線性表的認知,那麼來看一下它的概念:html
線性表是具備相同類型的 n (n>=0) 個元素的有限序列,其中 n 爲表長,當 n=0 時,該表爲空表。算法
爲何要相同類型?計算機在處理大量數據的時候,把相同的數據元素稱做爲數據對象。每每要處理相同的數據元素,也就處理一種數據對象。不會把音頻和圖片雜糅到一塊兒進行處理。也不會把抽象事物,好比說人和汽車組合到一塊兒進行處理。由於這樣沒有意義,也沒有高的效率。數據結構
對於相同類型,在接下來所學到的全部的數據結構中都有這樣的要求。由於具備相同類型的數據結構,它在解決實際問題,實現算法時,才更加的有意義。其次,對於這個類型的範圍,它的定義其實並不狹隘,並不只僅侷限於咱們常見的類型,好比說整型、浮點型這樣的類型。對於從實際生活中抽象出來的類型,好比說一本書、一我的也是能夠做爲一個元素的。它與 C++ 中的面向對象的類比較類似。code
除了相同類型,定義中還有一個比較重要的點,那就是是有限序列。什麼是有限?就是說明該線性表的長度是有限的,由於計算機沒法處理無限多的數據。第二個是序列,根據下面的表示方法能夠發現,線性表中每個元素都是有序號的,序列的意思就是有序號的一種排列。這就是在線性表定義中比較重要的兩個點。htm
若 L 命名爲線性表,則通常表示爲:對象
在 L 當中,線性表的每個元素都具備相同類型,都是屬於同一個數據對象的數據元素,分別是 a1、a2 一直到 an 。能夠發現,對於全部的元素它都是有序號的。blog
那麼在表中,第一個元素,稱它爲表頭元素,最後一個元素稱它爲表尾元素。除了這樣,該線性表還有一些其餘的邏輯關係。排序
在線性表中,每個元素除了表頭元素,它都有一個前驅結點。也就是 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 中數據元素的個數。
以上就是線性表的基本操做。