Linked list(單鏈表)

2022-03-08 17:52:39 字數 4854 閱讀 9368

不記得是大一還是大二開的《資料結構》,當時可真是可愛,按照我當時的想法就是這東西有什麼用,目光短淺的我。。。學什麼都是學這個有什麼用啊?典型的一枚功利分子。

後來讀了一些讀物,了解到 資料結構 就是如何表示 資料 的一種形式,計算機什麼是計算,計算就是機械式的資訊處理,資訊是什麼,資訊就是數字,一列列的 binary number。

但是在處理資訊時,考慮到了 效率,人就是懶,不懶不進步。把資訊以一種什麼樣的形式交給計算機,就可以立馬得出 result。這就用到了 資料結構 + 演算法,雖然演算法還沒看。。。

在geeksforgeeks學ds,我也真的是有意思。

linked list 單鏈表,優點和缺點也已經寫過了。

1 #include2 #include34//

linked list from fengsf

5struct

node6;

10void printlist(struct node *n)

111718}

19//

在頭結點之前插入新節點

20void push(struct node ** head_ref, int

new_data)

2128

//鍊錶中間插入新節點

29void afteradd(struct node * prev_node, int

new_data)

3036

37struct node * new_node = (struct node *) malloc (sizeof(struct

node));

38 new_node->data =new_data;

39 new_node->next = prev_node->next;

40 prev_node->next =new_node;41}

42//

在尾節點之後插入新節點

43void endadd(struct node ** head_ref, int

new_data)

4455

56while(null != last->next)

5760

61 last->next =new_node;62}

63//

移除結點通過data

64void deleteelementbykey(struct node ** head_ref, int

key)

6574

75while(null != temp && temp->data !=key)

7680

if(null ==temp)

8185 pre->next = temp->next;

86free

(temp);87}

88//

移除結點通過位置

89void deleteelementbyposition(struct node ** head_ref, int

position)

9099 temp = (*head_ref);

100if(null != temp && 1 ==position)

101106

int times = 0

;107

while(null != temp && (position-1) !=times)

108113

if(null ==temp)

114118 pre->next = temp->next;

119free

(temp);

120}

121//

銷毀鍊錶

122void destroylinkedlist(struct node **head_ref)

123132

133 (*head_ref) =null;

134}

135//

鍊錶的長度

136int linkedlistlength(struct node *head_ref)

137145

146return

length;

147}

148//

搜尋元素值是否存在於鍊錶中

149int searchelement(struct node * head_ref, int

key)

150157

if(null ==head_ref)

158162

163 judge = 1

;164

return

judge;

165}

166//

通過結點的位置獲取結點

167struct node * getnodebyposition(struct node * head_ref, int

position)

168175

if(position <= 0 && position >length)

176180

int times = 0

;181

while(null != head_ref && times != position-1

)182

186return

head_ref;

187}

188//

獲取倒數的元素

189struct node * getnodebypositionfromlast(struct node * head_ref, int

position)

190197

if(-1 ==boolposition(head_ref, position))

198201

202for(int i = 0; i < length-position; i++)

203206

return

head_ref;

207}

208//

判斷所求位置是否正確

209int boolposition(struct node * head_ref, int

position)

210217

218return1;

219}

220//

返回中間的元素

221int findmiddleelement(struct node *head_ref)

222230

int findmiddleelement_2(struct node *head_ref)

231240

while(null != fast_ptr && null != fast_ptr->next)

241245

246return slow_ptr->data;

247}

248int findmiddleelement_3(struct node *head_ref)

249259

260 counter++;

261 head_ref = head_ref->next;

262}

263264

return mid->data;

265}

266//

不用遞迴返回元素個數

267int countwhithoutrecursion(struct node * head_ref, int

key)

268277

for(int i = 0; (i < length && head_ref != null); i++)

278284

else

285288

}289

290return

counter;

291}

292/*

void sortlist(struct node ** head_ref)

293302

else

303310

temp = (*head_ref);

311312

while(temp != null)

313319

else

320326

}327

}328}*/

329//

判斷是否為迴圈鍊錶

330int iscircular(struct node *head_ref)

331336

337struct node * temp = head_ref->next;

338339

while(temp != null && temp !=head_ref)

340343

344return (temp == head_ref) ? 1 : -1

;345

}346

static

int counter = 0

;347

//通過遞迴返回節點個數

348int countwithrecursion(struct node * head_ref, int

key)

349354

if(key ==head_ref)

355358 countwhithoutrecursion(head_ref->next, key);

359}

360//

判斷是否為空鍊錶

361int headisnull(struct node *head_ref)

362365

int main(void

)366

414else

415418

return0;

419 }

受益良多

資料結構 單鏈表 Linked List

include include define list init size 10 define listincrement 100 define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define o...

單鏈表(合併單鏈表)

單鏈表遍歷 單鏈表遍歷是從單鏈表頭指標head開始訪問,沿著next指標所指示的方向依次訪問每乙個結點,且每個結點只能訪問依次,直到最後乙個結點為止。遍歷時注意,不要改變head指標的指向。因此一般設定另外的乙個指標變數如p,p從head開始依次訪問乙個結點,直到鍊錶結束,此時p null,完成依次...

單鏈表之排序單鏈表

package list public class sortedsinglylist extends singlylist 將values陣列中的所有物件按值大小插入 public sortedsinglylist t values 過載深拷貝,由單鏈表構建排序單鏈表 public sortedsi...