#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义节点类型
typedef int data_t;
typedef struct node
{
data_t data;//以整型数据为例
struct node* next;//指向struct node 点的指针
}node_t;
int slist_create(node_t**, data_t);//函数声明
int slist_addhead(node_t**,data_t);//函数声明头插
int slist_addtail(node_t**, data_t);//函数声明尾插
void slist_showall(node_t*);//链表遍历
/***
创建单向列表
head:接收头指针地址的指针变量
data:待存储的数据
return -1:链表创建失败
return 0:链表创建成功
***/
int slist_create(node_t** head, data_t data)
{
node_t* pnew = (node_t*)malloc(sizeof(node_t));
if (pnew == NULL)
return -1;
pnew->data = data;
pnew->next = NULL;
*head = pnew;
return 0;
}
/***
尾插单向列表
head:接收头指针地址的指针变量
data:待存储的数据
return -1:链表创建失败
return 0:链表创建成功
***/
int slist_addtail(node_t** head, data_t data)
{
node_t* pnew = (node_t*)malloc(sizeof(node_t));
if (pnew == NULL)
return -1;
pnew->data = data;
pnew->next = NULL;
node* p = *head, * q = NULL;
while (p)
{
q = p;
p = p->next;
}
if (q)
q->next = pnew;
else
*head = pnew;
return 0;
}
/***
头插单向列表
head:接收头指针地址的指针变量
data:待存储的数据
return -1:链表创建失败
return 0:链表创建成功
***/
int slist_addhead(node_t** head, data_t data)
{
node_t* pnew = (node_t*)malloc(sizeof(node_t));
if (pnew == NULL)
return -1;
pnew->data = data;
pnew->next = *head;
*head = pnew;
return 0;
}
//单向链表遍历
void slist_showall(node_t* head)
{
node* p = head;
while (p)
{
printf("%3d", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
node_t* head = NULL;
slist_create(&head, 888);
printf("%3d\n", head->data);
for (int i = 0; i < 10; i++)
slist_addtail(&head, i + 1);
for (int j = 0; j < 10; j++)
slist_addhead(&head, j + 1);
slist_showall(head);
return 0;
}
运行结果: