一,鍊錶的定義與分類
二,單鏈表的插入刪除
三,雙向鍊錶的插入與刪除
順序儲存表在進行操作的時候特別費時間
為了改變這一缺點,引入了鏈式儲存
單鏈表:
單鏈表的邏輯次序和物理次序不一定一致 鍊錶用一組任意的儲存單元來放線性表的結點 儲存單元可以連續也可非連續插入:在帶頭結點的單鏈表l中第i個位置前插入乙個元素的過程分為三部分每個線性鍊錶的結點只有乙個next指標域,所以為單鏈表
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...