鏈式儲存 靜態鍊錶

2021-10-04 20:50:29 字數 1779 閱讀 7961

早在還沒有c語言的時候,只有basic,fortran等早期的程式語言,這些語言沒有類似c語言的指標功能,但是他們又想描述鍊錶,那怎麼辦呢?

我們不得不佩服古人們的智慧型,有人想出了用陣列來代替指標來描述單鏈表。

因此,我們把用陣列描述單鏈表叫做靜態鍊錶,這種描述方法稱為游標實現法

線性表的靜態鍊錶儲存結構:

#define maxsize 1000

typedf struct

component,staticlinklist[maxsize]

;

對靜態鍊錶的初始化相當於初始化陣列:

status initlist

(staticlinklist space)

注意:

我們對第乙個和最後乙個元素進行特殊處理,它們的data不存放資料。

我們通常把為使用的陣列元素稱為備用鍊錶。

陣列的第乙個元素,即下標為0的那個元素的cur存放備用鍊錶第乙個結點的下標位址。

陣列的最後乙個元素,即下標為maxsize-1的那個元素的cur存放第乙個有數值的元素的下標,相當於單鏈表的頭結點作用。

陣列的最後乙個已使用的結點的游標為0.

首先時獲取空閒分量的下標:

int

malloc_sll

(staticlinklist space)

具體實現:

status listinsert

(staticlinklist l,

int i,elemtype e)

l[j]

.cur = l[k]

.cur;

//插入結點指向插入位置的下乙個結點

l[k]

.cur = j;

//將插入位置的前乙個結點與插入結點鏈結

}return ok;

}

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

status listdelete

(staticlinklist l,

int i)

j = l[k]

.cur;

//將刪除結點的下標賦值給j

l[k]

.cur = l[j]

.cur;

//將刪除結點的前乙個結點和後乙個結點鏈結

free_sll

(l, j)

;return ok;

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

void

free_sll

(staticlinklist l,

int j)

/*返回l中資料元素個數*/

intlistlength

(staticlinklist l)

return j;

}

優點

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

缺點

沒有解決連續儲存分配(陣列)帶來的表長難以確定的問題。

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

總的來說呢,靜態鍊錶其實是為沒有指標的程式語言設計的以中國實現單鏈表功能的方法。

儘管我們可以用單鏈表就不用靜態鍊錶了,但是這種思考方式是十分巧妙的,應該理解其思想,以備不時之需。

鏈式儲存結構之靜態鍊錶

1.靜態鍊錶 用陣列代替指標來描述鍊錶叫做靜態鍊錶。靜態鍊錶是為了給沒有指標的高階語言設計的一種實現單鏈表能力的方法。首先讓陣列的元素都由兩個資料域組成,data和cur,即陣列的每乙個下標都對應乙個data和乙個cur。2.靜態鍊錶的初始化 靜態鍊錶的初始化如下圖 初始化靜態鍊錶的 實現 publ...

4 線性表 鏈式儲存 靜態鍊錶

一開始對照書上的總覺得 不對!傻吊搗鼓了兩小時,總算弄出來了 自己用電腦打的感覺。果然跟光看書不一樣,還是不能懶。靜態鍊錶說明 1 0號節點為備用空間鍊錶的頭結點,maxsize 1號節點為實際鍊錶空間首結點。2 需要使用者自己實現malloc和free函式。3 辨明陣列中哪些分量未被使用的解決辦法...

鍊錶之鏈式儲存

優點 1 空間儲存方便,現用現申請 2 插入刪除,只針對單一資料,不需要移動大量資料 缺點 1 讀取,插入,刪除慢,需要從頭查詢,時間複雜度均為o n typedef struct nodenode intmain void getnode node l,int n,node tar if p i ...