顺序表-单链表
- 什么是单链表
- 链表,别名链式存储结构或单链表,用于存储逻辑关系为 “一对一” 的数据。与顺序表不同,链表不限制数据的物理存储状态,换句话说,使用链表存储的数据元素,其物理存储位置是随机的,用指针表示数据之间的逻辑关系的存储结构就是链式存储结构。
- 链表中每个数据的存储都由以下两部分组成:
数据元素本身,其所在的区域称为数据域;
指向直接后继元素的指针,所在的区域称为指针域
链表的示意图
链表的每个节点具体实现,在C语言中使用结构体
typedef struct Link{
int data;
struct Link * next;
}link;
- 一个完整的单链表组成
- 头指针:一个普通的指针,它的特点是永远指向链表第一个节点的位置。很明显,头指针用于指明链表的位置,便于后期找到链表并使用表中的数据;
- 节点 :链表中的节点又细分为头节点、首元节点和其他节点:
- 头节点:其实就是一个不存任何数据的空节点,通常作为链表的第一个节点。对于链表来说,头节点不是必须的,它的作用只是为了方便解决某些实际问题;
- 首元节点:由于头节点(也就是空节点)的缘故,链表中称第一个存有数据的节点为首元节点。首元节点只是对链表中第一个存有数据节点的一个称谓,没有实际意义;
- 其他节点:链表中其他的节点;
- 创建一个链表(链表的初始化)
LinkList initList() {
LinkList L = (LinkList *) malloc(sizeof(LinkList));
if (L == NULL) {
exit(0);
}
L->Next = NULL;
return L;
}
int IsEmpty(LinkList L) {
if (L->Next) {
return 1;
}
return 0;
}
void insert(link* L) {
link* p = L;
link* New;
for (int i = 0; i < 10; ++i) {
New = (LinkList *) malloc(sizeof(LinkList));
if (New == NULL) {
exit(0);
}
New->data = i;
p->Next = New;
p = New;
}
p->Next = NULL;
}
void delete(LinkList L, int num) {
LinkList p = L;
LinkList F;
while (p->data != num) {
F = p;
p = p->Next;
}
F->Next = p->Next;
free(p);
}