基础的线性表分为数组和链表两种,但它们各有优缺点
三个属性:空间起始位置(数组名),最大容量,当前长度;
优点 | 缺点 |
---|---|
*无需为逻辑关系增加空间 | *插入删除需要移动大量元素 |
*可以快速存取任意位置元素 | *长度变化大时难以确定容量 |
*造成存储空间“碎片” |
头指针 | 头结点 |
---|---|
*指向链表头节点或第一个节点的指针 | *在第一个节点之前,可存放链表长度 |
*标识作用,常冠以链表名 | *便于在第一节点前插入节点或删除第一节点 |
*必要元素,不可为空 | *非必需元素 |
标准写法:
typedef struct Node
{
ElemType data;
struct Node *next;
} Node;
typedef struct Node *LinkList; //把指向链表的指针的数据类型定义为LinkList
简化写法:
struct Node
{
ElemType data;
Node *next;
};
帮助没有指针功能的高级语言实现单链表功能(本质是数组)
特点:
优点 | 缺点 |
---|---|
同单链表的插入删除特性,时间复杂度低 | 同数组的存储特性,不能随意分配内存 |
特点:
尾结点的next指针指向头结点;
取消头指针head,改用尾指针rear,便于访问终端节点与开始节点;