資料結構 第二章 線性表

2021-09-26 16:40:40 字數 4879 閱讀 5751

線性表

是具有相同型別的n(n>=0)個元素的有限序列,其中n為表長,當n=0時,該錶為空表。

線性表的特點

線性表的九種基本操作

initlist(&l):初始化表。構造乙個空的線性表。

destroylist(&l):銷毀操作。銷毀線性表,並釋放線性表l所占用的記憶體空間。

locateelem(l,e):按值查詢操作。在表中l查詢具有給定關鍵字值的元素。

getelem(l,i):按位置查詢操作。獲取表l中的第i個位置的元素的值。

listinsert(&l,i,e):插入操作。在表l中的第i個位置上插入指定元素。

listdelete(&l,i,&e):刪除元素。刪除表l中第i個位置元素,並用e返回刪除元素的值。

printlist(l):輸出操作。按前後順序輸出線性表l的所有元素值。

empty(l):判空操作。若l為空表,則返回true,否則返回false。

length(l):求表長。返回線性表l的長度,即l中資料元素的個數。

線性表的順序表示

順序表的定義

線性表的順序儲存又稱順序表

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

順序表的實現

陣列靜態分配

#define maxsize 50

typedef

struct

sqlist;

陣列的動態分配

#define maxsize 50

typedef

struct

sqlist;

動態分配語句

c語言中

l.data=

(elemtype*

)molloc

(sizeof

(elemtype)

*initsize)

;

c++語言中

l.data=new elemtype[initsize]

;

線性表-順序表的基本操作

插入操作

bool listinsert

(sqlist &l,

int i,elemtype e)

刪除操作

bool listdelete

(sqlist &l,

int i,elemtype &e)

按值查詢(返回第乙個相等的元素的下表 )

int

locateelem

(sqlist l, elemtype e)

線性表-鏈式表示

單鏈表

線性表的鏈式儲存又稱單鏈表

通過一組任意的儲存單元來儲存線性表中的資料元素

通過指標實現線性邏輯關係

定義單鏈表

typedef

struct lnodelnode,

*linklist;

單鏈表基本操作

頭插法建立

linklist list_headinsert (linklist &l)

return l;

}

尾插法建立

linklist list_tailinsert (linklist &l)

r->next=

null

;return l;

}

按序號查詢&按值查詢

按序號查詢

lnode *

getelem

(linklist l,

int i)

return p;

}

按值查詢

lnode *

locateelem

(linklist l, elemtype e)

線性表-特殊鍊錶

雙鏈表定義雙鏈表

typedef

struct dnodednode,

*dlinklist;

插入操作

s-> next =p->next;

p->next->prior=s;

s->prior =p;

p->next =s;

刪除操作

p->next=q->next;

q->next->prior =p;

free

(q);

迴圈單鏈表

判空條件

l->next==l;
迴圈雙鏈表

判空條件

l->next==l;

l->prior==l;

靜態鍊錶

定義:

#define maxsize 50

typedef

struct dnodeslinklist[maxsize]

;

順序表vs鍊錶
順序表可以實現順序訪問和隨機訪問

單鏈表只能實現順序訪問

順序表 邏輯相鄰物理上也相鄰,通過相鄰表示邏輯關係

單鏈表 邏輯相鄰物理上不一定相鄰,通過指標表示邏輯關係

插入&刪除

單鏈表為o(1)(節點指標已知);o(n)(節點指標未知),但操作時只需要修改指標

順序表為o(n)且需要大量移動元素

查詢

按值查詢中單鏈表和順序表(無序)都為o(n)

按序查詢中單鏈表為o(n),順序表為o(1)

順序儲存

無論靜態分配還是非靜態分配都需要預先分配合適的記憶體空間。1. 靜態分配時預分配空間太大會造成浪費,太小會造成溢位;2. 動態分配時雖然不會溢位但是擴充需要大量移動元素,操作效率低。

鏈式儲存

在需要時分配節點空間即可,高效方便,但指標要使用額外空間

線性表三個常用操作最值

順序表

int min = l[0];

int max = l[0];

for(int i = 0;i < n;i++)

鍊錶

int min = p -> next -> data;

int max = p -> next -> data;

for(;p!=null;p=p->next)

逆置

順序表

int i = 0;

int j = n-1;

while(i < j)

鍊錶

while(p->next!=r)
歸併

順序表

int i = 0,j = 0;

int k = 0;

for(;i < l1-size && j < l2-size;k++)

while(i < l1-size)

l[k++] = l1[i++];

while(j < l2-size)

l[k++] = l2[j++];

鍊錶

while(p -> next!=null&&q ->next!=null)else

}if(p->next!=null)

r -> next = p -> next;

if(q->next!=null)

r -> next = q-> next;

free(p);

free(q);

資料結構 第二章 線性表

線性表 順序儲存 鏈式儲存 順序表單鍊錶 雙鏈表迴圈鍊錶 靜態鍊錶 陣列指標實現 借助陣列實現 定義 線性表是具有相同資料型別的n n 0 個資料元素的有限序列,其中n為表長,當n 0時該線性表是乙個空表。特點 1 個數有限 2 表中元素具有邏輯上的順序性。3 表中元素都是資料元素,每個元素都是單個...

資料結構 第二章 線性表

資料結構 第二章 線性表 模板 引數化的多型 引數化多型性 講程式所處理的物件型別引數化,使一段 可用於處理多種不同型別的物件 採用模板程式設計 提供 共享機制 邏輯功能相同,資料型別不同 定義格式 template 尖括號內又稱模板形參表 返回值型別 函式名 參數列 如果變數被引數化,則返回值型別...

資料結構第二章 線性表

線性表的定義 線性表是具有相同特性的資料元素的乙個有限序列。線性表的特性 1 有窮性 乙個線性表中的元素個數是有限的。2 一致性 乙個線性表中的所有元素的性質相同。從實現的角度看,所有元素具有相同的資料型別。3 序列性 線性表的順序儲存結構 線性表的順序儲存結構簡稱為順序表。順序表的基本運算 1 初...