線性表的鏈式儲存

2021-09-24 09:41:49 字數 2617 閱讀 6857

順序結構需要一塊連續的儲存空間,那如果我們只有零散的空間呢?

線性表的鏈式儲存是指通過一組任意的儲存單元來儲存線性表中的資料元素。

為了建立起資料元素之間的線性關係,對每個鍊錶結點,除了存放元素自身的資訊之外,還需要存放乙個指向其後繼的指標。

因為每個結點只有乙個指標指向下乙個結點,故又稱單鏈表

通常用「頭指標」來標識乙個單鏈表, 例如linklist l 那麼頭指標l就代指乙個單鏈表,頭指標為「null」時則表示乙個空表。

單鏈表第乙個結點之前附加乙個結點,稱為頭結點。頭結點的資料域可以不設任何資訊,也可以記錄表長等相關資訊。頭結點的指標域指向線性表的第乙個元素結點。

頭結點和頭指標的區別?

不管帶不帶頭結點,頭指標始終指向鍊錶的第乙個結點,而頭結點是帶頭結點鍊錶中的第乙個結點,結點內通常不儲存資訊

為什麼要設定頭結點?

1.處理操作起來方便 例如:對在第一元素結點前插入結點和刪除第一結點的操作與其它結點的操作就統一了。

2.無論鍊錶是否為空,其頭指標是指向頭結點的非空指標,因此空表和非空表的處理也就統一了。

建立新的結點分配記憶體空間,將新結點插入到當前鍊錶的表頭

頭插法建立單鏈表,讀入資料的順序與生成的鍊錶中元素的順序是相反的。

建立新的結點分配記憶體空間,將新結點插入到當前鍊錶的表尾,需要增加乙個指向表尾元素的尾指標。

;//尾結點指標置空

return l;

}尾插法建立單鏈表,讀入資料的順序與生成的鍊錶中元素l 的順序是相同的。

在單鏈表中從第乙個結點出發,順指標next域逐個往下搜尋,直到找到第i個結點為止,否則返回最後乙個結點指標域null。

lnode *

getelem

(linklist l,

int i)

return p;

//返回第i個結點的指標,如果i大於表長,直接返回p即可

}

從單鏈表第乙個結點開始,由前往後依次比較表中各結點資料域的值,若某結點資料域的值等於給定值e,則返回該結點的指標;若整個單鏈表中沒有這樣的結點,則返回null。

插入操作是將值為x的新結點插入到單鏈表的第i個位置上。先檢查插入位置的合法性,然後找到待插入位置的前驅結點,即第i−1個結點,再在其後插入新結點。

演算法思路:

1.取指向插入位置的前驅結點的指標

① p=getelem(l,i-1);

2.令新結點s的指標域指向p的後繼結點

② s->next=p->next;

3.令結點p的指標域指向新插入的結點s

刪除操作是將單鏈表的第i個結點刪除。先檢查刪除位置的合法性,然後查詢表中第i−1個結點,即被刪結點的前驅結點,再將其刪除。

演算法思路:

1.取指向刪除位置的前驅結點的指標 p=getelem(l,i-1);

2.取指向刪除位置的指標 q=p->next;

3.p指向結點的後繼指向被刪除結點的後繼 p->next=q->next

4.釋放刪除結點 free(q);

線性表的鏈式儲存

此方法雖然簡單,但是真寫起來太複雜了。線性表的鏈式儲存 include include struct lnode 線性表的初始化 void init l lnode l 線性表的後插建立 void create l1 lnode l n next null 線性表的後插建立 void create ...

線性表的鏈式儲存

引言 一 單鏈表 相較於順序儲存用連續的儲存單元儲存,單鏈表採用鏈式儲存結構,用一組位址任意的儲存單元儲存資料元素。特點 1 儲存單元可以是不連續的,即邏輯結構與物理結構可以不相同 2 元素用結點儲存,每個結點由元素值和下乙個元素的位址構成 3 單鏈表是由每個結點的指標域按照邏輯次序相互連線而成的。...

線性表的鏈式儲存

include include include typedef int elemtype typedef struct nodenode,nodeptr 鍊錶節點 typedef struct listlist,listptr 鍊錶,頭結點為0位置 listptr initlist 初始化鍊錶 vo...