一、基本概念
定义:具有相同特性数据数据元素的有限序列(n为0代表空表)
线性表只有一个表头元素和一个表尾元素,除去表头和表尾元素其余元素均只有一个前驱和一个后继。
举个栗子:小明是表头元素,小白是表尾元素,其他人前面和后面都有人。
小明 | 小红 | 小兰 | 小水 | 小白 |
线性表分按存储结构分为顺序表和链表
二、顺序表
下图比如一个顺序表,每个人之间紧挨着,每个单元格长度一样,知道张三在哪,可通过房间号找任何一个人。
张三 (0) | 李四 (1) | 王五 (2) | 赵六 (3) | 王二麻子 (4) |
三、链表
链表的元素是随机存储的
2 | 1 | 6 | 0 | 3 | 4 |
像上面这样我们很难从一堆数据找出元素间的关系,所以链表中的每个元素都有一个指针。
每个链表结点都有一个数据域和一个指针域。
下图比如一个链表
房间是随意分布的,每个房间都有走向下一个房间的指示。要走到最后一个,必须走完前面全部的。
名称 | 访问特性 | 存储特点 | 优点 | 缺点 |
顺表表 | 支持随机访问 | 连续 | 查找速度快 | 插入,删除效率低,固定大小 |
链表 | 不支持随机访问 | 不一定连续 | 插入,删除效率高,存储空间需求不定的情形 | 查找效率低,孔空间占用多 |
四、基本结构体定义
typedef struct {
int data[maxSize];//存放顺序表元素的数组
int length;//顺序表长度
}Sqlist;//顺表类型的定义
单链表
typedef struct LNode{
int data;//data中存放结点的数据域
struct LNode *next;//指向后继节点的指针
}LNode;//定义单链表的结点类型
双链表
typedef struct DLNode{
int data;//data中存放结点的数据域
struct DLNode *prior;//指向前驱节点的指针
struct DLNode *next;//指向后继节点的指针
}DLNode;//定义双链表的结点类型