C語言版本 單鏈表的實現

2021-10-01 14:23:14 字數 3999 閱讀 1143

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 list;

1718

void initlist(list *list);//

初始化單鏈表

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

在單鏈表的末尾插入元素

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

在單鏈表的頭部插入元素

21void show_list(list *list);//

列印單鏈表

22void pop_back(list *list);//

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

23void pop_front(list *list);//

刪除單鏈表的第乙個元素

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

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

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

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

26int length(list *list);//

求單鏈表的長度

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

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

28void sort(list *list);//

對單鏈表進行排序

29void reverse(list *list);//

逆置單鏈表

30void clear(list *list);//

清除單鏈表

31void destroy(list *list);//

摧毀單鏈表

3233

#endif

//__slist_h__

slist.cpp

1 #include"

slist.h"2

3void initlist(list *list) 910

void push_back(list *list, elemtype x)

2223

void push_front(list *list, elemtype x)

3839

void show_list(list *list)

47 printf("

nul.\n");

4849}50

51void pop_back(list *list)

6566

void pop_front(list *list)

8081

void insert_val(list *list, elemtype x)

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

109110

int length(list *list)

113114

void delete_val(list *list, elemtype x)

123//

step 3:判斷結點位置是否是表尾

124if (p == list->last)//

是表尾125

pop_back(list);

126else

133}

134135

void sort(list *list)

156}

157158

void reverse(list *list)

173}

174175

void clear(list *list)

185//

step 3:頭指標和尾指標重新都指向頭結點

186 list->last = list->first;

187//

step 4:更新鍊錶長度

188 list->size = 0

;189

}190

191void destroy(list *list)

main.cpp

1 #include"

slist.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語言版本 雙鏈表的實現

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 ...

單鏈表實現 C語言

單鏈表分為帶頭結點和不帶頭結點。頭結點是和普通結點一樣,有資料域,指標域。資料域存放鍊錶結點的個數,指標域存放指向鍊錶的指標。不帶頭結點是指煉表有乙個單純的指標,指向鍊錶,不儲存資料。pragma once ifndef linklist h 防止標頭檔案重複引用 define linklist h...

C語言單鏈表實現

今天分享一下單鏈表 有空頭 的一些操作!主要呢就是增 刪 列印!單鏈表可以比喻成一趟火車,有空頭的單鏈表就像是乙個火車頭拉著一節有一節的車廂。乙個車廂中有資料域和指標域,指標域用來連線,每節車廂肯定要有東西連著,不然就沒有方向了。如圖 所以連線的時候只要將指標域指向下乙個節點就是連線上了,然後刪除呢...