写此篇原因:数据结构中,用具体算法实现时,基本 *** 作需要反复使用。建立自己的头文件,可以在不同的项目中很方便的调用自己在头文件中包含的基本 *** 作函数。
以下用约瑟夫问题举例,其中运用了数据结构中的线性表以及其链式存储结构。
-约瑟夫main.c文件
#include#include "list.h" //主函数 int main() { //printf("------------ < 约瑟夫(Joseph)>----------------nn"); linkList head; int m,n; //printf("输入n请输入报数上限值m和总人数n:"); scanf("%d%d",&m,&n); head = CreateList(n); DeleteElem(head, m, n); return 0; }
注意:自己编写的头文件应当要用引号 " " 括起来,
而库文件的应用尖括号< >括起来,不过库文件用双引号也可以。
- list.h文件
#ifndef LIST_H #define LIST_H typedef struct LNode LNode ; typedef struct LNode* linkList; linkList CreateList(int n); //建立一个带头结点的单向循环链表 (且有头指针) void DeleteElem(linkList pt,int m,int n);//从链表中依次删除要出列的人的结点,并且打印出列人的序号 #endif
说明:该文件主要是包括了各种自定义的函数、自定义的结构体类型的声明等。
- list.c文件
#include#include "list.h" typedef struct LNode{ int num; //数字序号 int pass;//个人密码 struct LNode *next;//指向下一个结点的指针 }LNode , *linkList; linkList CreateList(int n)//建立一个带头指针的单向循环链表 { linkList L; int i; LNode *p1,*head; p1 = (linkList)malloc(sizeof(LNode)); L = p1; // printf("请依次输入这%d个人持有的密码(均小于30):",n); for(i = 1 ; i <= n ; ++i)//依次存入n个人的序号和密码 { p1->next = (linkList)malloc(sizeof(LNode));//p->next 是当前要存入密码的结点 p1->next->num = i; scanf("%d",&p1->next->pass) ; p1 = p1->next; } p1->next = L->next ; head = L->next; free(L); return head; } void DeleteElem(linkList pt,int m,int n)//从链表中依次删除要出列的人的结点,并且打印出列人的序号 { int i; linkList p; // printf("n输出n出列的序号依次为:"); while(pt->next != pt) { for(i = 1 ; i next; } printf("%d ",pt->num); //打印出列的人的序号 m = pt->pass; p->next = pt->next ; //将出列人的前后结点进行连接 free(pt) ; //释放出列人所在的结点 pt = p->next; } printf("%d",pt->num); //直接打印最后一个人的序号 free(pt); }
说明:该文件主要编写了具体的函数,以及结构体类型(即对自定义的函数以及结构体类型进行了定义)
三个文件建立以后,我是放在了同一目录下,当然也可以按自己的需要放置。其中的.h.gch文件是自动生成,目的是为了提高下次编译时的速度。不过,如果我们修改了.h文件,.h.gch文件不会自动更改。我们可以选择删除这个文件,或者将 Makefile文件 的 clean 目标项 修改为 rm -f *.o *.h.gch, 然后重新编译。
完成三个文件以后可以,可以建立项目,来解决约瑟夫问题了。
1.首先点击文件->新建->项目
2.按图选择,项目名字可以自定义。确定以后,我将该项目与刚才的三个文件保存到了同一目录下。
3.然后右击篮框内的“约瑟夫”,找到添加,将刚刚的三个文件添加到当前的约瑟夫项目下。
4.这样之后,删除其中无用的“未命名”,再点击篮框,即点击主函数,选择编译并运行(F11),即可。
5.运行主函数的结果
,初步建立一个简单的项目就完成了。希望自己后续的数据结构能用这种方法,建立自定义的数据结构的基本 *** 作函数文件。bye~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)