数据结构写自己的头文件
写此篇原因:数据结构中,用具体算法实现时,基本操作需要反复使用。建立自己的头文件,可以在不同的项目中很方便的调用自己在头文件中包含的基本操作函数。
那么,Dev-C++如何创建c项目?
以下用约瑟夫问题举例,其中运用了数据结构中的线性表以及其链式存储结构。
-约瑟夫main.c文件
#include<stdio.h>
#include "list.h"
//主函数
int main()
{
//printf("------------ < 约瑟夫(Joseph)>----------------\n\n");
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 <stdio.h>
#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<m ; ++i)
{
p = pt;
pt = pt->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~