常用資料結構

2022-09-06 15:33:11 字數 3117 閱讀 9775

1. 鍊錶

鍊錶可以使用陣列實現,也可以使用指標實現。用陣列實現的鍊錶的插入、刪除操作需要o(n)的時間複雜度,很少使用。

用指標實現的鍊錶,插入刪除操作可以o(1)時間完成。

code

鍊錶結點定義

struct

node

;鍊錶常用操作

intisempty(node

*l);

intislast(node

*l);

node

*find(elementtype x, node

*l);

node

*findprevious(elementtype x, node

*l);

void

delete(elementtype x, node

*l);

void

insert(elementtype x, node

*l, node

*p);

2. 棧

棧是插入刪除操作都只能在乙個位置上進行的表,該位置是表的末端,叫做頂。棧可以用陣列實現,也可以用單鏈表。

code

結點定義

struct

node

;常用操作:鍊錶實現的棧,入棧出棧操作就在表頭進行。

intisempty(node

*s);

void

push(elementtype element, node

*s);

elementtype top(node

*s);

void

pop(node

*s);

棧的陣列實現是一種更為流行的實現方式

struct

stack

;void

push(elementtype x, stack*s)

3. 佇列

佇列也是表,使用佇列時插入在一端進行而刪除則在另一端進行。使用迴圈陣列實現。當隊列為空時,size=0。

code

結點定義

struct

queue

;isempty(queue

*q);

//迴圈陣列的size=rear-front+n*capacity,n取能使0

void

enqueue(elementtype x,queue*q)

}void

dequeue(queue

*q);

4. 二叉查詢樹

完全二叉樹:若設二叉樹的高度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的節點都連續集中在最左邊,這就是完全二叉樹。

滿二叉樹:除最後一層外,每一層上的所有結點都有兩個子結點(最後一層上的結點為葉子結點)。也可以這樣理解,除葉子結點外的所有結點均有兩個子結點。

對於樹中的每個結點x,它的左子樹中所有關鍵字的值都小於x的關鍵字值,而它的右子樹中所有關鍵字值大於x的關鍵字值。二叉樹不一定是完全樹,堆才是完全樹。

code

結點定義

struct

node

;常用操作

node

*find(elementtype x,node

*t); 

//重點掌握非遞迴演算法

node

*find(elementtype x,node*t)

}node

*findmin(node

*t);

node

*findmax(node

*t);

node

*insert(elementtype x,node

*t);

//insert略簡單,可以使用遞迴實現

node

*insert(elementtype x,node*t)

else

if(x

<

t->

element)

t->

left

=insert(x,t

->

left);

else

if(x

>

t->

right)

t->

right

=insert(x,t

->

right);

returnt;}

node

*delete(elementtype x,node

*t);//刪除略複雜,需要考慮是葉子節點,還是有幾個孩子節點的情況,還涉及到找最小子結點移動到刪除的父節點。

**l樹:一棵**l樹是其每個結點的左子樹和右子樹的高度最多差1的二叉查詢樹。

5. 堆

堆有兩個性質,即結構性和堆序性。

結構性:堆是一棵被完全填滿的二叉樹,有可能的例外是在底層,底層上的元素從左到右填入。堆用陣列實現,陣列下標為0的元素不存資料,從下標1開始。對於陣列任一位置i上的元素,其左兒子在位置2i上,右兒子在左兒子後的單元[2i+1]中,它的父親則在位置[i/2]

堆序性:在每乙個堆中,對於每個節點x,x的父親中的關鍵字小於(或等於)x中的關鍵字,根節點除外。這個是對於小頂堆。

**堆結構定義

struct

heapstruct

;堆常用操作

void

insert(elementtype x,heapstruct

*h);

//涉及到上濾

for(i

=++h

->

size;h

->

elements[i/2

]>

x;i/=2)

h->

elements[i]=h

->

elements[i/2

];h->

elements[i]=x;

}elementtype deletemin(heapstruct

*h);

//複雜,暫時不掌握了

elementtype findmin(heapstruct

*h);

intisfull(heapstruct

*h);

intisempty(heapstruct

*h);

常用資料結構

文章參考 資料結構 c語言版 嚴蔚敏 線性表 有頭有尾,中間節點有前驅有後繼 定義 一組連續的儲存單元依次儲存線性表的資料元素。定長順序表 typedef struct sqlist psqlist 不定長順序表 typedef struct dsqlist dsqlist,pdsqlist 單鏈表...

常用資料結構

function delete array element arr,pos for i pos 1 i length 1 i array pop arr return arr pos 3 echo 除第位置上的元素後 echo implode delete array element arr,pos...

常用資料結構

基本資料結構 邏輯 集合,線性結構,樹形結構,圖形結構 基本資料結構 物理 順序,鏈式,索引,雜湊。陣列,棧,鍊錶,圖,雜湊表,對列,樹,堆 陣列 在記憶體中連續儲存多個元素的結構,在記憶體中的分配是連續,通過陣列下標運算元組元素 建立陣列 int a int a new int 3 int a n...