靜態鍊錶的講解和實現

2021-10-06 12:46:42 字數 1605 閱讀 8796

其實所謂靜態鍊錶,就是用陣列代替指標,來描述單鏈表。

首先,陣列裡面的元素是由兩個資料域組成,data和cur,其中,data用來存放資料元素,也就是需要處理的資料cur相當於單鏈表中的next指標,存放該元素的後繼在陣列中的下標,cur也叫做游標。這種用陣列描述的鍊錶叫做靜態鍊錶,這種實現鍊錶的方法也叫游標實現法。

// 靜態鍊錶的儲存結構

#define maxsize 1000

// 鍊錶的長度

typedef

struct

component, staticlinklist[maxsize]

;

在陣列中,我們對陣列第乙個和最後乙個元素作為特殊元素處理,不存資料。通常把未被使用的陣列元素稱為備用鍊錶,而陣列的第乙個元素(下標為0)的cur就存放備用鍊錶的第乙個結點的下標;而陣列的最後乙個元素的cur則存放第乙個有數值的元素的下標,相當於頭結點,當鍊表為空,則為0,0表示空指標。

為了辨明陣列中哪些分量未被使用,我們要將所有未被使用過的及已被刪除的分量用游標鏈成乙個備用鍊錶。在初始化中,我們將除首尾之外的分量鏈結成乙個備用鍊錶。

// 初始化:將一維陣列space中各分量鏈成一備用鍊錶

void

initlist

(staticlinklist space)

在動態鍊錶結構中,結點的申請和釋放分別借用malloc()和free()兩個函式來實現。但在靜態鍊錶中,操作的是陣列,所以我們要手寫這兩個函式,另外,還有乙個求靜態鍊錶長度的函式。

// 若備用鍊錶非空,則返回分配的結點下標,否則返回0

intmalloc_sll

(staticlinklist space)

// 將下標k的空閒結點**到備用鍊錶

void

free_sll

(staticlinklist space,

int k)

// 求靜態鍊錶的長度

intlistlength

(staticlinklist l)

return j;

}

// 在l中第i個位置插入新的資料元素e

bool

listinsert

(staticlinklist l,

int i, elemtype e)

return

false

;}

// 刪除在l中第i個資料元素e

bool

listdelete

(staticlinklist l,

int i, elemtype &e)

優點:

在插入和刪除操作時,只需要修改游標,不需要移動元素,從而改進了在順序儲存結構中插入和刪除操作需要移動大量元素的缺點

缺點:沒有解決連續儲存分配帶來的表長難以確定的問題

失去了順序儲存結構隨機訪問的特性

靜態鍊錶的實現

include include define size 6 define struct of static list typedef struct stlist stlist 初始化靜態鍊錶分配空間大小為size個 stlist initlist stlist tempptr of for i in...

靜態鍊錶的實現

用陣列來代替指標,來描述單鏈表 將陣列元素分成兩個資料域,data和cur。data用來存放資料元素,cur存放該元素的後繼在陣列中的下標 游標 游標實現法 線性表的靜態鍊錶儲存結構 define maxsize 1000 typedef struct component,staticlinklis...

靜態鍊錶的實現

2018 8 23 21 35 靜態鍊錶的實現 陣列中第乙個結點表示備用鍊錶的第乙個結點 陣列中最後乙個結點表示鍊錶的第乙個結點 當next域為0時均代表到了當前鍊錶的結尾,因此有兩個陣列單元 0與max 1 無法儲存目標資料 include define max 10 此時靜態鍊錶中只能儲存8個元...