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