《大話資料結構》讀後總結(八)

徐曙輝發表於2019-04-04

線性表

定義

線性表(List):零個或多個資料元素的有限序列

《大話資料結構》讀後總結(八)

線性表元素的個數n(n≥0)定義為線性表的長度,當n=0時,稱為空表。

抽象資料型別

ADT 線性表(List)
Data
    線性表的資料物件集合為{a1, a2, ......, an},每個元素的型別均為DataType。
    其中,除第一個元素a1外,每一個元素有且只有一個直接前驅元素,
    除了最後一個元素an外,每一個元素有且只有一個直接後繼元素。
    資料元素之間的關係是一對一的關係。
Operation
    InitList(*L):          初始化操作,建立一個空的線性表L。
    ListEmpty(L):          若線性表為空,返回true,否則返回false。
    ClearList(*L):         將線性表清空。
    GetElem(L, i, *e):     將線性表L中的第i個位置元素值返回給e。
    LocateElem(L, e):      線上性表L中查詢與給定值e相等的元素,
                           如果查詢成功,返回該元素在表中序號表示成功;
複製程式碼

順序儲存結構

定義

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

《大話資料結構》讀後總結(八)

順序儲存方式

把第一個資料元素存到陣列下標為0的位置中,接著把線性表相鄰的元素儲存在陣列中相鄰的位置。

/* 儲存空間初始分配量 */
#define MAXSIZE 20             
/* ElemType型別根據實際情況而定,這裡假設為int */
typedef int ElemType;          
typedef struct
{
    /* 陣列儲存資料元素,最大值為MAXSIZE */
    ElemType data[MAXSIZE];    
    /* 線性表當前長度 */
    int length;                
} SqList;
複製程式碼
陣列長度與線性表長度區別
  • 陣列的長度是存放線性表的儲存空間的長度,儲存分配後這個量一般是不變的。
  • 線性表的長度是線性表中資料元素的個數,隨著線性表插入和刪除操作的進行,這個量是變化的。
  • 在任意時刻,線性表的長度應該小於等於陣列的長度。
地址計算方法

《大話資料結構》讀後總結(八)
用陣列儲存順序表意味著要分配固定長度的陣列空間,由於線性表中可以進行插入和刪除操作,因此分配的陣列空間要大於等於當前線性表的長度。

假設佔用的是c個儲存單元,那麼線性表中第i+1個資料元素的儲存位置和第i個資料元素的儲存位置滿足下列關係(LOC表示獲得儲存位置的函式)。

LOC(ai+1)=LOC(ai)+c
LOC(ai)=LOC(a1)+(i-1)*c
複製程式碼

《大話資料結構》讀後總結(八)

歡迎掃描下方二維碼,持續關注:

image

網際網路工程師(id:phpstcn),我們一起學習,一起進步

相關文章