基础的线性表分为数组链表两种,但它们各有优缺点

一、顺序存储结构(数组)

三个属性:空间起始位置(数组名),最大容量,当前长度;

优点 缺点
*无需为逻辑关系增加空间 *插入删除需要移动大量元素
*可以快速存取任意位置元素 *长度变化大时难以确定容量
*造成存储空间“碎片”

二、链式存储结构(链表)

1、单链表

头指针 头结点
*指向链表头节点或第一个节点的指针 *在第一个节点之前,可存放链表长度
*标识作用,常冠以链表名 *便于在第一节点前插入节点或删除第一节点
*必要元素,不可为空 *非必需元素

标准写法:

typedef struct Node
{
    ElemType data;
    struct Node *next;
} Node;
typedef struct Node *LinkList; //把指向链表的指针的数据类型定义为LinkList

简化写法:

struct Node
{
    ElemType data;
    Node *next;
};

2、静态链表

帮助没有指针功能的高级语言实现单链表功能(本质是数组)

特点:

优点 缺点
同单链表的插入删除特性,时间复杂度低 同数组的存储特性,不能随意分配内存

3、(单向)循环链表

特点:

尾结点的next指针指向头结点;

取消头指针head,改用尾指针rear,便于访问终端节点与开始节点;