線性表的鏈式儲存

2021-10-01 08:51:19 字數 1687 閱讀 8093

一,鍊錶的定義與分類

二,單鏈表的插入刪除

三,雙向鍊錶的插入與刪除

順序儲存表在進行操作的時候特別費時間

為了改變這一缺點,引入了鏈式儲存

單鏈表:

單鏈表的邏輯次序和物理次序不一定一致 鍊錶用一組任意的儲存單元來放線性表的結點 儲存單元可以連續也可非連續

每個線性鍊錶的結點只有乙個next指標域,所以為單鏈表

插入:在帶頭結點的單鏈表l中第i個位置前插入乙個元素的過程分為三部分

1,查詢:

在單鏈表中找到第i-1個結點並由指標pre提示

2,申請:

申請新結點s,將資料域的值置為e

3,插入掛鏈:

通過修改指標域將新結點s掛入單鏈表l

主要**如下:

s = (node *) malloc(sizeof(node))   /申請乙個新結點/

s - > data = e

s - >next = pre - > next /修改指標,完成插入操作/

pre - > next = s

刪除

比如要刪除第i個結點,過程分為兩步:

1,查詢 通過計數方式找到第i-1個結點並由指標pre指示

2,刪除 刪除第i個結點並釋放結點空間 主要

**如下:

r = pre -> next

pre -> next= pre-> next -> next

free(r)

為了讓查詢刪除等操作的時間變得更短,引入了雙向鍊錶

每個結點不僅有後繼指標,還有前驅指標,為某些運算提供了很大的便利

結構定義如下:

typedef struct dnode

dnode , * doublelist;

插入:

主要演算法如下:

t->prior=p;

t->next=p->next;

p->next->prior=t;

p->next=t;

刪除:

主要演算法如下:

p->prior->next=p->next; //p前驅結點的後鏈指向p的後繼結點

p->next->prior=p->prior; //p後繼節點的前鏈指向p的前驅結點

free(p) ; //釋放*p的空間

"前兩行的語句可以顛倒"

線性表的鏈式儲存

此方法雖然簡單,但是真寫起來太複雜了。線性表的鏈式儲存 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...