前言
链表 [Linked List]:链表是由一组不必相连【不必相连:可以连续也可以不连续】的内存结构 【节点】,按特定的顺序链接在一起的抽象数据类型。
下面介绍单链表的创建:
创建节点
链表是由一个个节点构成的,首先我们就要创建节点
首先用结构体创建节点Node
typedef struct Node
{
int data; //数据域
struct Node* next; //指针域
}LNode, * Linklist; //LNode为节点,Linklist为zhiz
头插法创建单链表
Linklist CreateFromHead() //头插法创建单链表
{
Linklist L; //定义头指针L
LNode *s; //定义节点的指针s
int x; //定义要输入的数据
L = (Linklist)malloc(sizeof(Linklist));//为头指针开辟内存空间
L->next = NULL; //将头指针的next初始化为空
//输入数据
printf("请输入一个整型数:");
scanf("%d", &x);
//用循环继续添加数据,当输入为-1时输入完成
while (x != -1)
{
s = (LNode*)malloc(sizeof(Linklist));//为新数据开辟内存空间
s->data = x; //将数据存入到节点的data中
s->next = L->next; //将新数据的next赋值为头节点的next
L->next = s; //将头节点指向新数据
//继续输入新的数据
printf("请输入一个整型数:");
scanf("%d", &x);
}
return L; //返回头节点
}
尾插法创建单链表
Linklist CreateFromTail() //尾插法创建单链表
{
Linklist L; //定义头指针L
LNode *r,*s; //定义节点的指针r和s,s指向新开辟的数据,r指向尾节点
int x; //定义要输入的数据
L = (LNode*)malloc(sizeof(LNode));//为头指针开辟内存空间
L->next=NULL; //将头指针的next初始化为空
r=L; //将尾指针指向头指针L
//输入数据
printf("请输入一个整型数:");
scanf("%d", &x);
//用循环继续添加数据,当输入为-1时输入完成
while (x != -1)
{
s = (LNode*)malloc(sizeof(LNode));//为新数据开辟内存空间
s->data = x; //将数据存入到节点的data中
s->next = r->next; //将新数据的next赋值为头节点的next
r->next = s; //将尾指针指向新数据
r=s; //将新插入的节点设为尾指针
//输入数据
printf("请输入一个整型数:");
scanf("%d", &x);
}
r->next=NULL; //将尾指针的next指向NULL
return L; //返回头节点
}
总结
头插法和尾插法建立单链表步骤很相似,而尾插法需要将新插入的节点重新设为尾节点,以上就是两种方法创建单链表。