1、单链表的定义
- 由n个结点(ai(1<=i<=n)的存储映像)链结成一个链表, 即为线性表(a1,a2,…,an)的链式存储结构。又由于链表中的每个结点只包含一个指针域,故又称为线性链表或单链表
- 单链表包括两个域:数据域【存储数据元素信息的域】和指针域【存储直接后继存储位置的域】,其中指针域中存储的信息称作指针或链。
- 图示
2、头指针、头结点、首元结点的区别
1)三者的定义:
- 头指针是指向链表中第一个结点的指针。
- 头结点是在首元结点之前附设的一个结点,其指针域指向首元结点,头结点的数据域可以不存放任何信息,也可以存储与数据类型相同的其他附加信息。
- 首元结点是指链表中存储第一个数据元素a1的结点。
1)三者关系图示:
3、单链表的操作
1)单链表的定义和表示
单链表的存储结构
//线性表的单链表存储结构
typedef struct LNode{
ElemType data;//结点的数据域
struct LNode *next ;//结点的指针域
}LNode,*LinkList;//LinkList为结构体LNode的指针类型
注意:ElemType表示数据域data的通用类型
例如:
在单链表中存储学生学号、姓名、性别、成绩的类型定义如下
typedef struct student{
char num[8];//学号,数据域
char name[8];//姓名,数据域
char gender[8];//性别,数据域
int score;//成绩,数据域
struct student *next;//指针域
}LNode,*LinkList;
为了方便链表的操作,通常是这样来定义的
typedef struct{
char num[8];//学号,数据域
char name[8];//姓名,数据域
char gender[8];//性别,数据域
int score;//成绩,数据域
}ElemType;
typedef struct LNode{
ElemType data;//数据域
struct LNode *next;//指针域
}LNode,*LinkList;
2)单链表的基本操作
<1> 初始化 【InitList】
思路:
- 要创建什么样类型的单链表,这是必须明确的;
- 生成新结点作为头结点,用头指针L指向头结点;
- 头结点的指针域置空。
代码演示:
Status InitList(LinkList &L){
//构造一个空的单链表L
L=(LinkList)malloc(sizeof(LNode));
L