关于DLL封装

总觉得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.    }  

这里写图片描述

猜你喜欢

转载自blog.csdn.net/Around_corner/article/details/78508696