第三章 線性表 順序儲存結構

2022-08-31 22:03:12 字數 2818 閱讀 9773

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

若將線性表記為(a1, ..., ai-1, ai , ai+1 , ..., an),則表中 ai-1 領先於ai , ai領先於ai+1,稱ai-1是ai的直接前驅元素,ai+1是ai的直接後繼元素。當i=1,2,...,n-1時,ai有且僅有乙個直接後繼,當i=2,3,..,n時,ai有且僅有乙個直接前驅。

線性表元素的個數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

listdelete(*l,i,*e) 刪除線性表l中第i個位置元素,並用e返回其值

listlength(l)   返回現象表l的元素個數

endadt

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

一維陣列來實現順序儲存結構

順序儲存結構需要三個屬性

# 儲存空間的起始位置:陣列data,它的儲存位置就是儲存空間的儲存位置

# 線性表的最大儲存容量:陣列長度maxsize

# 線性表的當前長度:length

資料長度與線性表長度的區別

陣列的長度是存放線性表的儲存空間的長度,儲存分配後這個量一般是不變的

線性表的長度是線性表中資料元素的個數,隨著線性表插入和刪除操作的進行,這個量是變化的

在任意時刻,線性表的長度應該小於等於陣列的長度。

儲存器中的每個儲存單元都有自己的編號,這個編號稱為位址。

loc(ai)=loc(a1)+(i-1)*c

線性表順序儲存結構的優缺點

優點:

#無須為表示表中元素之間的邏輯關係而增加額外的儲存空間

#可以快速得訪問表中任一位置的元素

缺點

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

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

#造成儲存空間的碎片

順序儲存結構的讀取、插入和刪除

讀取元素操作思路:

實現getelem操作,即將線性表l中第i個位置元素返回

就程式而言,只要i的數值在陣列中下標範圍內,就是把陣列第i-1下標的值返回即可

插入演算法的思路:

# 如果插入位置不合理,丟擲異常

# 如果線性表長度大於等於陣列長度,則丟擲異常或動態增加容量

# 從最後乙個元素開始向前遍歷到第i個位置,分別將他們都向後移動乙個位置

# 將要插入元素填入位置i處

# 表長+1

刪除演算法的思路

# 如果刪除位置不合理,丟擲異常

# 取出刪除元素

# 從刪除元素位置開始遍歷到最後乙個元素位置,分別將他們向前移動乙個位置

# 表長減1

第三章 線性表

一 順序表的儲存 include.h using namespace std const int maxsize 100 typedef int datatype typedef struct seqlist 二 順序表的操作 初始化順序表 void initlist seqlist l 建立順序表...

第三章線性表

線性表 零個或多個資料元素的有限序列.線性表的順序儲存結構 指的是用一段位址連續的儲存單元依次儲存線性表的資料元素.頭指標 頭指標是指鍊錶指向第乙個節點的指標,若煉表有頭結點,則是指向頭結點的指標.無論鍊錶是否為空,頭指標均不為空.頭指標是鍊錶的必要元素 頭結點 頭結點不是鍊錶的必須元素.頭結點是為...

第三章 線性表 鏈式儲存結構(靜態鍊錶)

用陣列描述的鍊錶叫做靜態鍊錶 也叫游標實現法 陣列的元素由兩個資料域組成,data和cur,也就是說,陣列的每個下標都對應乙個data和乙個cur,資料域data,用來存放資料元素,游標cur相當於單鏈表中的next指標,存放該元素的後繼在陣列中的下標 我們對陣列的第乙個和最後乙個元素作為特殊元素處...