單鏈表的插入與刪除
單鏈表的插入
單鏈表第
i個資料插入結點的演算法思路:
1.宣告乙個結點
p指向第乙個結點,初始化j從
1開始;2.當
j時,就遍歷鍊錶,讓
p的指標向後移動,不斷指向下乙個結點,j累加
1;3.若到鍊錶末尾
p為空,則說明第
i個元素不存在;
4.否則查詢成功,在系統中生成乙個空結點s;
5.將資料元素
e賦值給
s->data;6.
單鏈表的插入標準語句
:s->next = p->next; p->next = s; 7.
返回成功。
/*初始條件:順序線性表
l已存在,1《
i《listlength(l)*/ /*
操作結果:用e
返回l中第i
個資料元素的值*/
statuslistinsert(linklist l, int i, elemtype *e)
if(!p || j>1)
returnerror;
s=(linklist)malloc(sizeof(node));/*
生成新結點*/
s->data= e;
s->next= p->next;/*將p
的後繼結點賦值給
s的後繼
*/
p->next= s; /*將s
賦值給p
的後繼*/
returnok; }
單鏈表的刪除
思路:1.
宣告乙個結點
p指向第乙個結點,初始化j從
1開始;2.當
j時,就遍歷鍊錶,讓
p的指標向後移動,不斷指向下乙個結點,j累加
1;3.若到鍊錶末尾
p為空,則說明第
i個元素不存在;
4.否則查詢成功,將欲刪除的結點
p->next
賦值給q;5.
單鏈表的刪除標準語句
p->next = q->next; 6.
將q結點中資料賦值給
e,作為返回;
7.釋放
q結點;
8.返回成功;
/*初始條件:順序線性表
l已存在,1《
i《listlength(l)*/ /*
操作結果:用e
返回l中第i
個資料元素的值*/
statuslistdelete(linklist l, int i, elemtype *e)
if(!(p->next) || j>1)
returnerror;
q= p->next;/*將p
的後繼結點賦值給
s的後繼
*/
p->next= q->next; /*將s
賦值給p
的後繼*/
*e= q->data'
free(q);'
returnok; }
單鏈表的插入和刪除
常見的資料結構只有兩種 1 陣列 2 鍊錶 陣列中的元素是連續儲存的,而鍊錶的元素則可以不連續,只需要有指標指向下乙個元素即可。因此鍊錶適合儲存插入刪除比較頻繁的一組資料。另外鍊錶的儲存空間是動態的,不必預先分配指定的空間大小。下面介紹鍊錶的幾種常見操作。首先先定義乙個鍊錶 struct linkl...
單鏈表插入刪除
在鍊錶的插入刪除操作上理解起來比順序表更為容易,其不需要變動在i位置前的所有的元素,只需要修改節點指標即可。插入 設在鍊錶的i位置插入新元素,設i 1節點的指標域為p,設插入的節點指標域為s,所以插入操作應該為 s next p next 將s的字尾改為p的字尾,p的字尾是原來的第i個點的指標域,將...
單鏈表的插入刪除
include using namespace std struct lnode void creat link lnode head head指標的引用,lnode head 傳遞的是指標,但是對於指標的原值卻發生了copy,這樣你雖然可以對指標指向的記憶體進行修改但是不能對指標進行修改。因此要傳...