1、项目结构
2、main.c文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "linklist.h"
int main(){
struct LinkNode *head_node = initLinkNode();
add_LinkList(head_node);
printf("\n");
foreach_LinkList(head_node);
return 0;
}
3、linklist.h文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义链表结构体
struct LinkNode{
int num;
struct LinkNode *next;
};
//初始化链表
struct LinkNode * initLinkNode();
//带头结点的链表,从头插入
void add_LinkList(struct LinkNode *head_LinkList);
//遍历链表
void foreach_LinkList(struct LinkNode *head_LinkList);
4、linklist.c文件
#include "linklist.h"
struct LinkNode * initLinkNode(){
struct LinkNode * headNode = malloc(sizeof(struct LinkNode));
headNode->num = -1;
headNode->next = NULL;
return headNode;
}
void add_LinkList(struct LinkNode *head_LinkList){
int val = -1;
while(1){
printf("请输入一个数据,输入-1代表退出\n");
scanf("%d",&val);
if (-1 == val){
break;
}
struct LinkNode * new_Node = malloc(sizeof(struct LinkNode));
new_Node->num = val;
new_Node->next = NULL;
if (head_LinkList->next != NULL){
new_Node->next = head_LinkList->next;
}
head_LinkList->next = new_Node;
}
}
void foreach_LinkList(struct LinkNode *head_LinkList){
if (head_LinkList == NULL)
{
return;
}
struct LinkNode * new_Node = head_LinkList->next;
while (new_Node != NULL)
{
printf("%d\n",new_Node->num);
new_Node = new_Node->next;
}
}
5、Makefile文件
CC := gcc
TARGET ?= target #定义目标文件
MAIN_FILES := ./main.c #主函数
INCDIRS := inc #包含.h文件的目录
SRCDIRS := src #包含.c文件的目录
INCLUDE := $(patsubst %, -I %, $(INCDIRS)) #将包含.h文件的所有目录加上 -I
CFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c)) #查找到指定目录的所有.c文件
#$@:表示目标文件
#$^:表示所有的依赖文件
#$<:表示第一个依赖文件;$?:表示比目标还要新的依赖文件列表
$(TARGET):$(MAIN_FILES) $(CFILES)
$(info target: $@)
$(info all: $^)
$(info first: $<)
$(info SRC_DIRS_all: $(CFILES))
$(CC) -o $@ $^ $(INCLUDE)
.PHONY : clean
clean:
rm $(TARGET)
链接:https://pan.baidu.com/s/1BAt6awRUZN87OUkY3cf_rg?pwd=srwf
提取码:srwf