用C語言實現帶頭結點的單向線性鍊錶

2022-04-28 13:06:43 字數 3109 閱讀 4933

1 #include2 #include3

#define len sizeof(struct node)

45 typedef struct

node*linklist; //

定義鍊錶的結構體910

//初始化鍊錶

11linklist initlist()

1819

//在鍊錶末尾新增乙個結點

20void addnode(linklist list, int

num) //

用while迴圈使指標指向最後乙個結點的位置

26 p1 = (struct node *) malloc (len); //

定義乙個新的實際結點賦值,並使鍊錶原本的最後乙個結點的next域指向它

27 p1->elem =num;

28 p1->next =null;

29 p2->next =p1;30}

3132

//檢視鍊錶指定結點,存在就返回這個結果,否則返回null

33 linklist find(linklist list, int

pos)

42 p = p->next; //

將指標後移以遍歷鍊錶到pos位置43}

44return

p;45}46

47//

在鍊錶指定位置插入乙個結點

48bool insert(linklist list, int num, int

pos) else60}

6162

//刪除指定位置結點

63bool del(linklist list, int

pos) else75}

7677

//遍歷鍊錶

78void

print(linklist list)

86 printf("\n"

);87}88

89//

求鍊錶長度

90int

length(linklist list)

98return

len;99}

100101

//得到鍊錶指定位置的元素值

102int getelem(linklist list, int

pos)

110 p = p->next;

111}

112return p->elem;

113}

114115

//判斷鍊錶是否為空

116bool

isempty(linklist list) else

122}

123124

//判斷鍊錶是否包含指定元素

125bool isincluded(linklist list, int

num)

132 p = p->next;

133}

134return

false

;135

}136

137//

判斷指定元素在鍊錶中的位置,如果沒有該元素則返回null

138int locateelem(linklist list, int

num)

147 p1 = p1->next;

148}

149}

150151

if(pos > 0

) else

156}

157158

//重置鍊錶,只保留頭結點

159void

clearlist(linklist list)

168}

169170

//銷毀鍊錶,先重置鍊錶,然後釋放頭結點

171void

destroylist(linklist list)

175176

void

main()

218}

219break

;220

}221

case3:

231 result =getelem(mylist, pos);

232if(result !=null) else

237break

;238

}239

case4:

249 printf("

\n請輸入要插入的值:");

250 scanf("

%d", &num);

251252

if(insert(mylist, num, pos)) else

258break

;259

}260

case5:

269270

if(del(mylist, pos)) else

276break

;277

}278

case6:

279 printf("

\n鍊錶的長度為%d

", length(mylist));

280break

;281

case7:

282if

(isempty(mylist)) else

287break

;288

case

8: else

297break

;298

}299

case

9: else

308break

;309

}310

case10:

311clearlist(mylist);

312break

;313

case11:

314destroylist(mylist);

315break

;316

case12:

317if(!mylist) else

324}

325}

326getchar();

327 }

C語言實現單鏈表的節點插入(帶頭結點)

我在之前一篇部落格 c語言實現單鏈表 不帶頭結點 節點的插入 中詳細實現了如何在乙個不帶頭結點的單鏈表中進行節點的插入。但是在實際應用中,帶頭結點的鍊錶更為常用,更為方便。今天我們就要來使用帶頭結點的單鏈表進行節點的插入。示例 上傳至 核心 如下 node insertnode node pnode...

C語言實現單鏈表節點的刪除(帶頭結點)

我在之前一篇部落格 c語言實現單鏈表節點的刪除 不帶頭結點 中具體實現了怎樣在乙個不帶頭結點的單鏈表的刪除乙個節點,在這一篇部落格中我改成了帶頭結點的單鏈表。演示樣例上傳至 刪除型別有兩種 1 刪除某個位置pos的節點 2 推斷x值是否在鍊錶中,若存在則刪除該節點 核心 例如以下 刪除某個位置pos...

C語言實現單鏈表的逆序列印(帶頭結點)

我在之前一篇部落格 c語言實現單鏈表 不帶頭結點 的逆序列印 中詳細實現了對乙個不帶頭節點的鍊錶的逆序列印,整體思路也是非常的簡單,也就是依次遍歷原鍊錶,然後把取出的節點用頭插法建立乙個新的鍊錶,新鍊錶就是原鍊錶的逆序。這篇部落格我會來實現使用帶頭結點的鍊錶實現逆序,思路同上述是一樣的。上傳至 核心...