linklist.c
#include "linklist.h"
//创建空的链表,为头结点在堆区分配空间
linklist_t *creat_empty_linklist()
{
linklist_t *head = NULL;
head = (linklist_t *) malloc(sizeof(linknode_t));
if(NULL == head)
{
printf("malloc is fail!\n");
return NULL;
}
memset(head,0,sizeof(linklist_t));
//head->next = NULL;
//head->data = 0;
return head;
}
//头插法:每次都在头结点后插入数据
//特点:插入的顺序和输出的顺序是相反的
void insert_head_linklist(linklist_t *head,datatype_t data)
{
//为结点在堆区申请空间
linklist_t *temp = (linklist_t *)malloc(sizeof(linknode_t));
if(NULL == temp)
{
printf("malloc is fail!\n");
return ;
}
//插入数据
temp->data = data;
//连接结点
temp->next = head->next;
head->next = temp;
return ;
}
//输出链表的内容
void print_data_linklist(linknode_t *head)
{
linklist_t *p = head;
while(p->next != NULL)
{
printf("%d ",p->next->data);
p = p->next;
}
return ;
}
linklist.h
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int dartatype_t;
typedef struct node
{
datatype_t data;//数据域保存有效数据
struct node *next;//指针域保存下一个结点的地址
}linknode_t;
extern void print_data_linklist(linknode_t *head);
extern void insert_head_linklist(linklist_t *head,datatype_t data);
extern linklist_t *creat_empty_linklist();
#endif
main.c
#include "linklist.h"
int main()
{
linklist_t *head = NULL;
datatype_t data;
int n;
head = creat_empty_linklist();
printf("please input you want insert data number: ");
scanf("%d",&n);
printf("please input %d data : ",n);
for(i = 0;i < n;i++)
{
scanf("%d",&data);
insert_head_list(head,data);
}
print_data_linklist(head);
retutn 0;
}
运行上面的所有文件可以有下面结果: