线性表定义:
线性表:由零个或多个元素组成的有限序列
如果一个数据元素序列满足:
(1)除第一个和最后一个数据元素外,每个数据元素只有一个前区数据元素和一个后继数据元素;
(2)第一个数据元素没有前驱数据元素;
(3)最后一个数据元素没有后继数据元素。
注意:数组从0开始计算,线性表从1开始计算;
线性表分支:
(1)顺序表:使用顺序结构实现的线性表
ps:计算机有两种基本的存储结构(物理):顺序结构、离散结构
栈内存:顺序结构 堆内存:离散结构
(2)链表:使用链式存储结构的线性表
每个存储节点不仅包含元素本身的信息(数据域),还包含元素之间的逻辑关系的信息。即一个节点中包含有直接后继节点的地址信息,称为指针域
单链表:只设置一个指针域用以指向其后继节点。
双链表:设置两个指针域用以指向前驱节点与后继节点。
顺序结构存储封装需要的三个属性:
1.存储空间的起始位置,数组data,它的存储位置就是线性表存储空间的存储位置;
2.线性表的最大存储容量,数组长度MAX_SIZE(初始化后一般不变);
3.线性表当前长度;
4.头结点(一般不存储任何数据),放在第一个节点之前,其数据与一般没有意义(可以存放链表的长度),并且头结点不一定是链表的必要元素;
5.头指针,头指针是指链表指向第一个节点的指针,若链表有头结点,则是指向头结点的指针,其具有标识作用,无论链表是否为空,头指针均不为空,并且头指针是链表的必要元素;
空链表:
注意:单链表尽量不使用for控制循环,而是使用“工作指针”的右移
顺序存储结构与单链表
空间性能
顺序结构:需要一段连续的存储空间。
单链表:任意一块存储空间。
时间性能
查找:顺序结构通过下标查找O(1),单链表通过指针后移O(N)。
插入和删除:顺序结构平均移动一半的表长O(N),单链表指针后移O(1)。
空间性能
顺序结构:预分配空间,有溢出问题。
单链表:无