链表
线性表
线性表:由零个或多个数据元素组成的有限序列
线性表有两种存储方式:
- 顺序存储结构——“数组”
- 链式存储结构——“链表”
线性表强调:
- 它是一个序列,元素之间有先来后到;
- 若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他元素有且只有一个前驱和后继;
- 线性表强调是有限的。
线性表的实现
顺序存储的表示
Elemtype 是“元素的类型”的简化体,可以根据data的类型而改变
#define MAXSIZE 100
typedef struct{
ElemType elem[MAXSIZE];
int length;
}SqList; //定义顺序表类型
SqList L; //定义变量L,L是SqList这种类型的,L是个顺序表
链表的分类
单向链表(链式存储)
单向链表是最简单的链表形式。我们将链表中最基本的数据称为结点(node),每一个结点包含了数据域和指向下一个结点的指针域。
特点:
用一组任意的存储单元存储线性表的数据元素,这组存储单元可以存在内存中未被占用的任意位置。
头结点
1)放在第一个数据元素结点之前
2)每次插入新元素的时候,不需要每次判断第一个结点是否为空
3)可以直接在头结点的数据块部分存储链表的长度,而不用每次都遍历整个链表
4)头结点不是链表的必要元素
结点的定义:
typedef struct node //结构体{
int val; //数据域
struct node *next; // 指针域
} Node;
// 创建一个具有值的结点
Node* CreateNode(int val)//创建指针{
Node *newNode = (Node*)malloc(sizeof(Node));