1.创建一个结构体
typedef struct catalog
{
char* content;
struct catalog* next;
}CATALOG;
2.创建一个返回值为CATALOG*类型,参数为char*类型的函数
参数val --获取所传文件的首地址
CATALOG* init_catalog(char* val)
{
CATALOG* now = (CATALOG*)calloc(1, sizeof(CATALOG));//开辟一个CATALOG类型大小的空间并将空间地址传给CATALOG类型的指针变量now,最后将空间内容置零
if (now == NULL) //判断空间是否开辟成功
{
perror("error : ");//不成功,显示错误
return -1; //并退出程序
}
(now)->content = val;//设置目录内容
(now)->next = NULL; //设置指针指向的下一个地址为空地址
return now;
}
3.声明三个指向CATALOG的指针类型变量n1,n2,n3,用来接收init_catalog函数的返回值。
再将n1,n2,n3串成一个链表。
CATALOG* n1 = init_catalog("打开\n");
CATALOG* n2 = init_catalog("退出\n");
CATALOG* n3 = init_catalog("插入\n");
n1->next = n2;
n2->next = n3;
3.打印目录
这里初学者看到printf函数的参数或许会很奇怪
这里我们可以查一下标准,printf的参数类型为const char * 类型,
在创建结构体时我将content变量的类型设置为指向char的指针类型
你明白了吗?
CATALOG* n = n1;
while(n)
{
printf(n->content);
n = n->next;
}
4.最后将calloc开辟的空间释放。
free(n1);
free(n2);
free(n3);
free(n);
5.下面是完整的代码实现
#include<stdio.h>
#include<stdlib.h>
typedef struct catalog
{
char* content;
struct catalog* next;
}CATALOG;
CATALOG* init_catalog(char* val)
{
CATALOG* now = (CATALOG*)calloc(1, sizeof(CATALOG));
if (now == NULL)
{
perror("error : ");
return -1;
}
(now)->content = val;
(now)->next = NULL;
return now;
}
int main(void)
{
CATALOG* n1 = init_catalog("打开\n");
CATALOG* n2 = init_catalog("退出\n");
CATALOG* n3 = init_catalog("插入\n");
n1->next = n2;
n2->next = n3;
CATALOG* n = n1;
while(n)
{
printf(n->content);
n = n->next;
}
free(n1);
free(n2);
free(n3);
free(n);
return 0;
}