單鏈表的基本操作 C語言實現

2021-10-23 21:57:29 字數 4144 閱讀 4946

優勢1:第1個位置的插入刪除更加方便

優勢2:統一空表和非空表的處理

若使用頭結點,無論表是否為空,頭指標都指向頭結點,也就是*lnode型別,對於空表和非空表的操作是一致的。

若不使用頭結點,當表非空時,頭指標指向第1個結點的位址,即*lnode型別,但是對於空表,頭指標指向的是null,此時空表和非空表的操作是不一致的。

//下面是尾插法建立

//宣告節點結構

typedef

struct linklink;

//建立鍊錶的函式

}

從實現**中可以看到,該鍊錶是乙個具有頭節點的鍊錶。由於頭節點本身不用於儲存資料,因此在實現對鍊錶中資料的"增刪查改"時要引起注意。

同順序表一樣,向鍊錶中增添元素,根據新增位置不同,可分為以下 3 種情況:

插入到鍊錶的頭部(頭節點之後),作為首元節點;

插入到鍊錶中間的某個位置;

插入到鍊錶的最末端,作為鍊錶中最後乙個資料元素;

雖然新元素的插入位置不固定,但是鍊錶插入元素的思想是固定的,只需做以下兩步操作,即可將新元素插入到指定的位置:

將新結點的 next 指標指向插入位置後的結點;

將插入位置前結點的 next 指標指向插入結點;

//p為原鍊錶,elem表示新資料元素,add表示新元素要插入的位置

link *

insertelem

(link * p,

int elem,

int add)

}//建立插入結點c

link * c =

(link*

)malloc

(sizeof

(link));

c->elem = elem;

//向鍊錶中插入結點

c->next = temp->next;

temp->next = c;

return p;

}

其中,從鍊錶上摘除某節點的實現非常簡單,只需找到該節點的直接前驅節點 temp,執行一行程式:

//p為原鍊錶,add為要刪除元素的值

link *

delelem

(link * p,

int add)

} link * del = temp->next;

//單獨設定乙個指標指向被刪除結點,以防丟失

temp->next = temp->next->next;

//刪除某個結點的方法就是更改前乙個結點的指標域

free

(del)

;//手動釋放該結點,防止記憶體洩漏

return p;

}

//p為原鍊錶,elem表示被查詢元素、

intselectelem

(link * p,

int elem)

i++;}

//程式執行至此處,表示查詢失敗

return-1

;}

//更新函式,其中,add 表示更改結點在鍊錶中的位置,newelem 為新的資料域的值

link *

amendelem

(link * p,

int add,

int newelem)

temp->elem=newelem;

return p;

}

#include

#include

typedef

struct link link;

link *

initlink()

;//鍊錶插入的函式,p是鍊錶,elem是插入的結點的資料域,add是插入的位置

link *

insertelem

(link * p,

int elem,

int add)

;//刪除結點的函式,p代表操作鍊錶,add代表刪除節點的位置

link *

delelem

(link * p,

int add)

;//查詢結點的函式,elem為目標結點的資料域的值

intselectelem

(link * p,

int elem)

;//更新結點的函式,newelem為新的資料域的值

link *

amendelem

(link * p,

int add,

int newelem)

;void

display

(link *p)

;int

main()

else

printf

("更改第3的位置上的資料為7:\n");

p =amendelem

(p,3,7

);display

(p);

return0;

}link *

initlink()

return p;

}link *

insertelem

(link * p,

int elem,

int add)

}//建立插入結點c

link * c =

(link*

)malloc

(sizeof

(link));

c->elem = elem;

//向鍊錶中插入結點

c->next = temp->next;

temp->next = c;

return p;

}link *

delelem

(link * p,

int add)

} link * del = temp->next;

//單獨設定乙個指標指向被刪除結點,以防丟失

temp->next = temp->next->next;

//刪除某個結點的方法就是更改前乙個結點的指標域

free

(del)

;//手動釋放該結點,防止記憶體洩漏

//迴圈單鏈表的建立,返回尾節點

pnode creat_list()

return ptail;

//返回尾指標

}

單鏈表的基本操作(C語言實現)

單鏈表的初始化,建立,插入,查詢,刪除。include include typedef int elemtype 定義結點型別 typedef struct node node,linkedlist 單鏈表的初始化 linkedlist linkedlistinit 單鏈表的建立1,頭插法建立單鏈表...

C語言實現單鏈表的基本操作

listnode.h ifndef listnode h define listnode h include stdio.h include assert.h include stdlib.h typedef int datatype typedef unsigned int size t type...

單鏈表 的基本操作 c語言實現

鍊錶的基本操作 c語言實現 執行環境 dev c 5.11 以下為原始碼,如有不正確的地方歡迎指正!include include define false 0 define true 1 typedef int datatype typedef struct nodelinklist linkli...