DS 4 單鏈表的各種插入與刪除的實現

2022-08-30 12:09:06 字數 2572 閱讀 8379

typedef struct

lnode lnode, *linklist;

帶頭結點的按位序插入:

//

在第i個位置插入元素e

bool listinsert(linklist &l, int i, char

e)

if (p == null) //

i值不合法(最後乙個結點指向null,這是要在null的後邊插入)

return

false

; lnode *s = (lnode *)malloc(sizeof(lnode)); //

新結點 s->data =e;

s->next = p->next;

p->next =s;

return

true

;}

不帶頭結點的按位序插入:(對於插入第乙個結點時需要特殊處理,其他部分與帶頭結點的一樣)

bool listinsert(linklist &l, int i, char

e)

if (i < 1

)

return

false

; lnode *p; //

p指向當前掃瞄到的結點

int j = 0; //

當前p指向的是第幾個結點

p = l; //

l指向頭結點,第0個結點

while (p != null && j < i - 1)

if (p == null) //

i值不合法(最後乙個結點指向null,這是要在null的後邊插入)

return

false

; lnode *s = (lnode *)malloc(sizeof(lnode)); //

新結點 s->data =e;

s->next = p->next;

p->next =s;

return

true

;}

指定結點的後插操作:

//

在p結點之後插入元素e

bool insertnextnode(lnode *p, char

e)

這裡的後插操作其實就相當於已經找到了p,和按位序插入while迴圈後邊的**一樣了,所以按位序插入後邊部分可以呼叫這個函式:

//

在第i個位置插入元素e

bool listinsert(linklist &l, int i, char

e) return insertnextnode(p,e);

}

指定結點的前插操作:

如果給了頭指標的話,只需要迴圈查詢到要插入結點的前乙個結點,然後插入即可

//

在p結點之前插入元素e

bool insertpriornode(linklist l, lnode *p, char e)

然而如果不給頭指標的話,就需要偷天換日一下,把新結點插入到p結點後邊,然後把新結點的資料元素和和p結點互換,邏輯上實現同樣的效果

//

在p結點之前插入元素e

bool insertpriornode(lnode *p, char

e)

如果是直接傳入了結點s,道理是一樣的;

//

在p結點之前插入結點s

bool insertpriornode(lnode *p, lnode *s)

按位序刪除(帶頭結點):

前半部分與插入結點一樣,先迴圈查詢p

//

刪除表l中第i個位置的元素,並用e返回刪除元素的值

bool listdelete(linklist &l, int i, char &e)

if (p ==null)

return

false

;

if (p->next ==null)

return

false

; lnode *q = p->next; //

令q指向被刪除的結點

e = q->data; //

用e返回被刪的值

p->next = q->next; //

斷開連線

free(q); //

釋放被刪結點空間

return

true

;}

指定結點的刪除:

刪除結點p,需要修改其前驅 結點的next指標

方法1:傳入頭指標,迴圈尋找p的前驅結點

方法2:偷天換日(類似於結點前插的實現)

下面是方法2的**實現:

//

刪除指定結點p

bool deletenode(lnode *p)

如果p是最後乙個結點就只能從表頭開始依次尋找p的前驅...

單鏈表的插入與刪除

順序結構的缺點還是蠻大的,現在來看看單鏈表的插入與刪除。單鏈表中,在c語言可以用結構體指標描述 typedef struct node node typedef struct node linklist 有一點很重要 比如我隨便畫乙個。千萬別也成 p next s s netx p next 正確的...

單鏈表的插入刪除

include using namespace std struct lnode void creat link lnode head head指標的引用,lnode head 傳遞的是指標,但是對於指標的原值卻發生了copy,這樣你雖然可以對指標指向的記憶體進行修改但是不能對指標進行修改。因此要傳...

單鏈表插入與刪除演算法

include include typedef char datatype typedef struct node linklist linklist initlist linklist head linklist createlist linklist head,int n head next n...