資料結構(知識點)第2章 線性表 之 順序表

2021-10-24 22:17:43 字數 1677 閱讀 8529

2. 順序表上基本操作的實現

順序表是用一組位址連續的儲存單元依次儲存線性表中的資料元素,從而使得邏輯上相鄰的兩個元素在物理位置上也相鄰。

注意:順序表是線性表的儲存結構,順序表描述的是儲存上相鄰,線性表是邏輯結構,線性表描述的是邏輯上相鄰。

什麼是位址連續?

什麼是儲存單元?

線性表中的資料元素占用的儲存單元是多大?

每個資料元素占用的儲存單元大小相同嗎?

每個資料元素所占用的儲存單元大小相同嗎?

當然相同,因為線性表的定義是具有相同資料型別的n(n≥0)個資料元素的有限序列,其中n為表長。既然是每個元素是相同資料型別,所以每個資料元素所占用的儲存單元大小相同。

1)靜態分配

#define maxsize 50						//定義線性表的最大長度

typedef structsqlist;

// 順序表的型別定義

靜態分配的特點:陣列的大小和空間事先已經固定,一旦空間佔滿,再加入新的資料將會產生溢位,進而導致程式崩潰。

2)動態分配

#define initsize 100					//表長度的初始定義

typedef structseqlist;

//動態分配陣列順序表的型別定義

動態分配的特點:儲存陣列的空間是在程式執行過程中通過動態儲存分配語句分配的,一旦資料空間佔滿,就另外開闢一塊更大的儲存空間,用以替換原來的儲存空間,從而達到擴充儲存陣列空間的目的,而不需要為線性表一次性地劃分所有空間。

c的初始動態分配語句:

l.

data = (elemtype*

)malloc(sizeof(elemtype)

*initsize)

;

c++的初始動態分配語句:

l.

data = new elemtype[initsize]

;

注意:動態分配並不是鏈式儲存,它同樣屬於順序儲存結構,物理結構沒有變化,依然是隨機訪問方式,只是分配的空間大小可以在執行時決定。

1)主要特點是 隨機訪問,即通過首位址和元素序號可在時間o(1)內找到制定的元素。

例如,已知陣列a[10],陣列名a表示首位址,找到元素序號為0的元素可以通過a[0]獲得,找到元素序號為9的元素可以通過a[9]獲得。

2)儲存密度高,每個結點只儲存資料元素。

例如,比如鏈式儲存,每個結點除了要儲存資料元素,還要儲存必要的指標,以獲得相鄰元素所在的位址。

3)邏輯上相鄰的元素物理上也相鄰,所以插入和刪除需要移動大量元素。

例如,對於長度為10的陣列,要在序號為5的元素前插入乙個新元素,那麼從包括序號為5的元素開始的元素都要後移1位。

bool listinsert(sqlist &l,int i,elemtype e)

平均時間複雜度為 o(n)

bool listdelete(sqlist &l,int i,elemtype &e)

平均時間複雜度為o(n)

int locateelem(sqlist l,elemtype e)

平均時間複雜度為o(n)

資料結構之線性表知識點小結(一)

0 由零個或多個資料元素組成的有限序列 一般公司的組織架構是否屬於線性關係?分析 一般公司的總經理管理幾個總監,每個總監管理幾個經理。每個經理都有各自的下屬個員工 一對多1 抽象資料型別就是把資料型別和相關操作 在一起 2 合併線性表 void unionl list la,list lb 3 線性...

資料結構 王道2017 第2章 線性表

1.線性表的定義和基本操作 1.1 線性表的定義 線性表 i具有相同資料型別的n n 0 個資料元素的有限序列。其中n為表長,當n 0時,該線性表是乙個空表。若用l命名線性表,則一般表示為 l a1,a2,a3.ai,ai 1.an 其中,a1是唯一的第乙個資料元素,又稱為表頭元素 an是唯一的最後...

資料結構考試知識點總結 線性表

在順序表中插入或者刪除乙個元素,平均需要移動表中一半的元素,具體移動的元素個數與表長和該元素在表中的位置有關。線性表是具有相同特性的資料元素的乙個有限序列。線性表的三個特徵 1.所有資料元素型別相同2.線性表是由有限個資料元素構成的3.線性表中資料元素是位置有關的線性表中結點的集合是有限的,結點間的...