总觉得DLL封装这个东西学好了做一个小型的项目是很有用的一件事,在自己写这个代码的时候用了一个小时搞明白是怎么写封装,果然deadline的效果威力真大
(代码引用的链表中级和初级的代码)
注意:dll文件是要放到Test文件的代码文件那一堆里面去的,lib文件也是
DLL(实验名称)
一、实验目的
掌握DLL,掌握接口封装的方法
二、实验内容
实现链表的接口DLL封装,要求:
(1)要求封装链表初级题目的接口
(2)写出测试程序对DLL接口进行测试
(3)给出两种调用接口的方法
四、实验代码(包括运行结果截图)
1. Create_dll.h
2. #ifndef Create_dll_H
3. #define Create_dll_H
4. /*定义*/
5. typedef int DataType;
6. struct Node {
7. int n;
8. DataType info;
9. struct Node *link;
10. };
11. typedef struct Node *LinkList;
12. typedef struct Node *PNode;
13. __declspec(dllexport) LinkList initLinkList();
14. __declspec(dllexport) void createLinkList(LinkList head);
15. __declspec(dllexport) PNode Locate_i(LinkList llist, int i);
16. __declspec(dllexport) int isEmptyLinkList(LinkList llist);
17. __declspec(dllexport) PNode locatePre_link(LinkList llist, PNode p);
18. __declspec(dllexport) PNode Locate_i(LinkList llist, int i);
19. __declspec(dllexport) int insertPost_link(LinkList llist, PNode p, DataType x);
20. __declspec(dllexport) int insertPre_link(LinkList llist, PNode p, DataType x);
21. __declspec(dllexport) int deleteLinkList(LinkList llist, DataType x);
22. __declspec(dllexport) PNode findLinkList(LinkList llist, DataType x);
23. __declspec(dllexport) void printLinkList(LinkList head);
24. #endif
25.
26. #include<stdio.h>
27. #include<stdlib.h>
28. #include"Create_dll.h"
29. #pragma comment(lib,"Create_dll")
30.
31. LinkList initLinkList()
32. {
33. LinkList head;
34. head = (LinkList)malloc(sizeof(struct Node));
35. if (head == NULL)
36. {
37. printf("内存分配失败!\n");
38. return 0;
39. }
40. head->link = NULL;
41. return head;
42. }
43.
44. /*创建链表*/
45. void createLinkList(LinkList head)
46. {
47. LinkList rear;
48. PNode p;
49. head->n = 0;
50. int m;
51. rear = head;
52. scanf_s("%d", &m);
53. while (m != -1)
54. {
55. p = (PNode)malloc(sizeof(struct Node));
56. p->info = m;
57. p->link = NULL;
58. rear->link = p;
59. rear = p;
60. head->n++;
61. scanf_s("%d", &m);
62. }
63. }
64.
65. /*插入运算*/
66. /*查找i所在节点p*/
67. PNode Locate_i(LinkList llist, int i)
68. {
69. PNode p; int count = 0;
70. p = llist->link;
71. while (count < i)
72. {
73. p = p->link;
74. count++;
75. }
76. return p;
77. }
78.
79. /*判断是否为空*/
80. int isEmptyLinkList(LinkList llist)
81. {
82. return (llist->link == NULL);
83. }
84.
85. /*查找p所指结点的前驱结点*/
86. PNode locatePre_link(LinkList llist, PNode p)
87. {
88. PNode p1;
89. if (isEmptyLinkList(llist))
90. return 0;
91. p1 = llist;
92. while (p1 != NULL&&p1->link != p)
93. p1 = p1->link;
94. return p1;
95. }
96.
97. /*后插法*/
98. int insertPost_link(LinkList llist, PNode p, DataType x)
99. {
100. PNode q = (PNode)malloc(sizeof(struct Node));
101. if (q == NULL)
102. {
103. printf("out of space!\n");
104. return 0;
105. }
106. else
107. {
108. q->info = x;
109. q->link = p->link;
110. p->link = q;
111. return 1;
112. }
113. }
114.
115. /*前插法*/
116. int insertPre_link(LinkList llist, PNode p, DataType x)
117. {
118. PNode p1 = (PNode)malloc(sizeof(struct Node));
119. if (p1 == NULL)
120. return 0;
121. p1 = llist;
122. while (p1 != NULL&&p1->link != p)
123. p1 = p1->link;
124. insertPost_link(llist, p1, x);
125. return 1;
126. }
127.
128. /*删除运算*/
129. int deleteLinkList(LinkList llist, DataType x)
130. {
131. PNode p, q;
132. p = llist;
133. if (p == NULL)
134. return 0;
135. while (p->link != NULL&&p->link->info != x)
136. p = p->link;/*找值为x的节点的存储位置*/
137. if (p->link == NULL)
138. {
139. printf("No exist!\n");
140. return 0;
141. }
142. else
143. {
144. q = p->link;
145. p->link = q->link;
146. free(q);
147. return 1;
148. }
149. }
150.
151. /*查找运算*/
152. PNode findLinkList(LinkList llist, DataType x)
153. {
154. PNode p;
155. if (llist == NULL)
156. return 0;
157. p = llist->link;
158. while (p != NULL&&p->info != x)
159. p = p->link;
160. return p;
161. }
162.
163. /*输出*/
164. void printLinkList(LinkList head)
165. {
166. int j;
167. j = head->n;
168. head = head->link;
169. while (head)
170. {
171. printf("%d ", head->info);
172. head = head->link;
173. }
174. printf("\n");
175. }
176.
177. int main()
178. {
179. int i, k, flag = 0;
180. DataType x, n;
181. LinkList l;
182. PNode p, q;
183. l = initLinkList();
184. printf("------请输入单链表数据以-1结尾------\n");
185. createLinkList(l);
186. printf("此单链表为:\n");
187. printLinkList(l);
188. printf("------插入运算:请选择 前插法选1 后插法选0------\n");
189. scanf_s("%d", &flag);
190. printf("------请选择插入位置------\n");
191. scanf_s("%d", &i);
192. p = Locate_i(l, i - 1);
193. if (flag == 0)
194. {
195. printf("------后插法:输入x表示插入的数字------\n");
196. scanf_s("%d", &x);
197. insertPost_link(l, p, x);
198. }
199. else if (flag == 1)
200. {
201. printf("------前插法:输入x表示插入的数字------\n");
202. q = locatePre_link(l, p);
203. scanf_s("%d", &x);
204. insertPre_link(l, p, x);
205. }
206. else
207. printf("输入有误!!\n");
208. printf("单链表此时为:\n");
209. printLinkList(l);
210. printf("------输入k表示要删除的数据------\n");
211. scanf_s("%d", &k);
212. deleteLinkList(l, k);
213. printf("单链表此时为:\n");
214. printLinkList(l);
215. printf("------输入查找的数据n------\n");
216. scanf_s("%d", &n);
217. if (findLinkList(l, n))
218. printf("YES\n");
219. else
220. printf("NO\n");
221. printf("------判断是否为空链表------\n");
222. if (isEmptyLinkList(l))
223. printf("TRUE\n");
224. else
225. printf("FALSE\n");
226. return 0;
227. }