靜態鍊錶和迴圈鍊錶

2021-07-16 06:51:15 字數 913 閱讀 7996

所謂靜態鍊錶,與指標型描述的鍊錶(動態鍊錶)的區別在於靜態鍊錶借用一維陣列來描述鍊錶.這種儲存型別需要預先分配乙個較大的空間.其結構如下圖:

與動態鍊錶操作時最大的區別在於:

靜態鍊錶需由使用者自己實現malloc和free函式.為了辨明陣列中哪些分量未被使用,解決的辦法是:將所有未被使用過的以及被刪除的分量用游標鏈成乙個備用的鍊錶,每當進行插入時便可從備用鍊錶中取得第乙個結點作為待插入的新結點;反之,在刪除時將鍊錶中刪除下來的結點鏈結到備用鍊錶上.

以下實現**來自嚴蔚敏老師的《資料結構》(c語言版)

/* 線性表的靜態單鏈表儲存結構 */

/* 鍊錶的最大長度 */

#define maxsize 1000

/* 指定資料型別 */

#define int datatype

typedef struct s_nodes_link_list[maxsize];

/* 將整個陣列空間初始化成乙個鍊錶 */

void init_space_sl(s_node space)

void free_sl(s_node space, int k)

至此,靜態鍊錶的操作和動態鍊錶的操作一致.

迴圈單鏈表是另一種形式的鏈式儲存結構,和單鏈表的唯一區別在於:表中最後乙個結點的指標域指向頭結點.

迴圈單鏈表的示意圖如下:

雙鏈表 迴圈鍊錶 靜態鍊錶

一 雙鏈表 單鏈表有乙個大問題就是訪問後繼結點比較方便,但是如果訪問前驅結點,就需要從頭開始來一遍,時間複雜度為o n 這就很讓人不爽了,所以就有了雙鏈表。顧名思義,雙鏈表就是結點中有兩個指標prior和next,分別指向其前驅結點和後繼結點。如下圖所示 雙鏈表中結點型別的描述如下 typedef ...

靜態鍊錶和動態鍊錶

鍊錶分為兩種 動態和靜態 動態的結合相關函式能動態開闢記憶體,特點就是不會浪費記憶體單元 靜態鍊錶則沒有這個優點。靜態鍊錶和動態鍊錶是線性表鏈式儲存結構的兩種不同的表示方式。靜態鍊錶的初始長度一般是固定的,在做插入和刪除操作時不需要移動元素,僅需修改指標。動態鍊錶是相對於靜態鍊錶而言的,一般地,在描...

雙向鍊錶和迴圈鍊錶

雙向鍊錶和單鏈表的區別就在於多了乙個前驅 有需要檢視單鏈表的在主頁裡面查詢 雙向鍊錶 如下 typedef class node node class doublelist doublelist node buynode int val,node next,node pre void insert ...