單鏈表的按位置插入和刪除

2021-10-04 20:52:32 字數 1470 閱讀 1899

要想將結點s插入到ai與ai+1之間,不需要移動資料元素,只需要在ai與ai+1之間插入乙個新的結點,也就是我們要插入的結點s。關鍵就是要修改結點p的指標域,使得結點s稱為其後繼。

//把結點p的後繼作為結點s的後繼;

2. p->next=s;

//把結點s作為結點p的後繼;

注意這兩個語句的順序不能調換不能調換不能調換!!!

為什麼呢?如果調換①和②的順序,那麼插入操作就無法完成,並且會丟失ai結點的位址以及ai及其後面所有結點的資訊。

刪除操作和插入類似,在刪除乙個結點時,不需要移動元素,僅需要修改相應的指標鏈結,改變其前驅和後繼的關係即可。

主要操作語句為(要借助輔助指標變數q):

1. q = p->next;

//首先儲存b的指標,靠它才能找到c;

2. p->next=q->next;

//將a、c兩結點相連,淘汰b結點;

3.free

(q);

//釋放被刪除結點的空間

以下**實現了 單鏈表的按位置插入和刪除

#include

#include

#include

typedef

int elementtype;

typedef

struct node

*list;

list createlist

(void

)void

initlist

(list l)

}list find

(list l,

int position)

if(i == position)

else

}void

insert

(list l,

int position, elementtype e)

}void

delete

(list l,

int position)

}void

prtlist

(list l)

printf

("\n");

}int

main

(void

)

執行結果如下圖:

單鏈表的插入和刪除

常見的資料結構只有兩種 1 陣列 2 鍊錶 陣列中的元素是連續儲存的,而鍊錶的元素則可以不連續,只需要有指標指向下乙個元素即可。因此鍊錶適合儲存插入刪除比較頻繁的一組資料。另外鍊錶的儲存空間是動態的,不必預先分配指定的空間大小。下面介紹鍊錶的幾種常見操作。首先先定義乙個鍊錶 struct linkl...

單鏈表的插入和刪除

單鏈表的插入與刪除 單鏈表的插入 單鏈表第 i個資料插入結點的演算法思路 1.宣告乙個結點 p指向第乙個結點,初始化j從 1開始 2.當 j時,就遍歷鍊錶,讓 p的指標向後移動,不斷指向下乙個結點,j累加 1 3.若到鍊錶末尾 p為空,則說明第 i個元素不存在 4.否則查詢成功,在系統中生成乙個空結...

單鏈表插入刪除

在鍊錶的插入刪除操作上理解起來比順序表更為容易,其不需要變動在i位置前的所有的元素,只需要修改節點指標即可。插入 設在鍊錶的i位置插入新元素,設i 1節點的指標域為p,設插入的節點指標域為s,所以插入操作應該為 s next p next 將s的字尾改為p的字尾,p的字尾是原來的第i個點的指標域,將...