C語言版本 雙鏈表的實現

2021-10-01 14:23:14 字數 4206 閱讀 1086

dlist.h

1

#ifndef __dlist_h__

2#define __dlist_h__

34 #include5 #include

6 #include7 typedef int

elemtype;

8 typedef struct

node node,*pnode;

13 typedef struct

list list;

1819

void initdlist(list *list);//

初始化雙鏈表

20void push_back(list *list, elemtype x);//

在雙鏈表的末尾插入元素

21void push_front(list *list, elemtype x);//

在雙鏈表的頭部插入元素

22void show_list(list *list);//

列印雙鏈表

23void pop_back(list *list);//

刪除雙鏈表的最後乙個元素

24void pop_front(list *list);//

刪除雙鏈表的第乙個元素

25void insert_val(list *list, elemtype val);//

將資料元素插入到雙鏈表中(要求此時雙鏈表中的資料元素順序排列)

26 node* find(list *list, elemtype x);//

查詢雙鏈表中資料值為x的結點

27int length(list *list);//

求雙鏈表的長度

28void delete_val(list *list, elemtype x);//

按值刪除雙鏈表中的某個資料元素

29void sort(list *list);//

對雙鏈表進行排序

30void reverse(list *list);//

逆置雙鏈表

31void clear(list *list);//

清除雙鏈表

32void destroy(list *list);//

摧毀雙鏈表

3334

//優化

35 node* _buynode(elemtype x);//

建立結點

3637

38#endif

dlist.cpp

1 #include"

dlist.h"2

3 node*_buynode(elemtype x)

1011

void initdlist(list *list)

1920

void push_back(list *list, elemtype x)

2728

void push_front(list *list,elemtype x)

35else

41 list->size++;42}

4344

void show_list(list *list)

50 printf("

nul.\n");

51}5253

void pop_back(list *list)

6364

void pop_front(list *list)

71else

75free

(p);

76 list->size--;77}

7879

void insert_val(list *list, elemtype x) 93}

9495 node* find(list *list, elemtype x)

101102

int length(list *list)

105106

void delete_val(list *list, elemtype x)

113if (p == list->last)

117else

121free

(p);

122 list->size--;

123}

124125

void sort(list *list)

143else

149}

150}

151152

void reverse(list *list)

166}

167168

void clear(list *list)

176else

180free

(p);

181 p = list->first->next;

182}

183 list->size = 0

;184

}185

186void destroy(list *list)

main.cpp

1 #include "

dlist.h"2

3void

main()

29break;30

case2:

31 printf("

請輸入要插入的資料(-1結束):>");

32while (scanf("

%d", &item), item != -1

) 35

break;36

case3:

37 show_list(&mylist);

38break;39

case4:

40 pop_back(&mylist);

41break;42

case5:

43 pop_front(&mylist);

44break;45

case6:

46 printf("

請輸入要插入的資料:>");

47 scanf("

%d", &item);

48 insert_val(&mylist, item);

49break;50

case7:

51 printf("

請輸入要查詢的資料:>");

52 scanf("

%d", &item);

53 p = find(&mylist, item);

54if (p ==null)

55 printf("

要查詢的資料在單鏈表中不存在!\n");

56break;57

case8:

58 printf("

單鏈表的長度為%d\n

", length(&mylist));

59break;60

case9:

61 printf("

請輸入要刪除的值:>");

62 scanf("

%d", &item);

63 delete_val(&mylist, item);

64break;65

case10:

66 sort(&mylist);

67break;68

case11:

69 reverse(&mylist);

70break;71

case12:

72 clear(&mylist);

73break;74

//case 13:

75//

destroy(&mylist);

76//

break;

77default

:78 printf("

選擇錯誤,請重新選擇!\n");

79break;80

}81}82 destroy(&mylist);

83 }

C語言版本 單鏈表的實現

slist.h 1 ifndef slist h 2 define slist h 34 include5 include 6 include7 typedef int elemtype 8 typedef struct node node,pnode 12 typedef struct list ...

雙鏈表(c語言版)

雙鏈表相對於單鏈表來說,每乙個節點還存了乙個指向上乙個節點的指標,提公升了便捷性,例如某些情境下我們需要找到當前節點的上乙個節點等問題,雙鏈表對於單鏈表有很大的優勢。雙鏈表尾節點的prev指標指向頭節點,故雙鏈表的頭節點為哨兵衛,不存資料,僅作為標記作用。當單鏈表為空時,僅存在乙個頭節點,next指...

C語言 雙鏈表

還是 程式設計師面試寶典 上的 include include typedef struct student dnode 建立雙鏈表 dnode create else cycle 0 p next null p head head head next head pre null free p 釋放...