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...