数据结构笔记(二)
2、线性表
2.1 线性表的逻辑结构
线性表是n个数据特性相同的元素的组成有限序列,是最基本且常用的一种线性结构(线性表,栈,队列,串和数组都是线性结构),同时也是其他数据结构的基础。
对于非空的线性表或者线性结构的特点:
(1)存在唯一的一个被称作“第一个”的数据元素;
(2)存在唯一的一个被称作“最后一个”的数据元素;
(3)除第一个外,结构中的每个数据元素均只有一个前驱;
(4)除最后一个外,结构中的每个数据元素均只有一个后继;
2.2 线性表的顺序存储
顺序表:一组地址连续的存储单元依次存储线性表的数据元素,即逻辑相邻的元素,物理位置上也必须相邻。只有数据域(储存数据元素信息的域)
用途:(1)需要根据序号进行随机查找的数据
(2)数据定长的且所需内存不太大的数据
优点:地址连续,确定了起始位置,可以进行随机存取。增删慢,查找快
缺点:对于长度变化比较大的顺序表,起始预留空间必须按照最大空间分配,不能充分利用存储空间,扩容难
2.3 线性表的链式存储
链表:一组任意的存储单元存储线性表的数据元素,即逻辑相邻的元素,物理位置上可以相邻,也可以不相邻。由数据域和指针域(存储直接后继存储位置的域)组成
用途:(1)不需要根据序号进行随机查找的数据
(2)数据是逐渐增加的或者不定长的
(3)希望每次添加数据、删除数据的动作的时间复杂度是O(1)的(常量时间),即需要大量增删的数据
特点:地址不连续,无法随机存取。增删快,查找慢
分类:
单链表: 每个结点有一个指针域,指向其直接后继结点,表中尾结点的指针域是空。
双向链表: 每个结点有两个指针域,一个指向其直接后继结点,一个指向其直接前驱结点。
循环链表: 表中尾结点的指针域不再是空,而是指向头结点,整个链表形成一个环。
压缩列表:ziplist ----redis底层
跳表:结合链表和二分法的特点,将链表进行加工,创造一个二者的结合体
1.链表从头节点到尾节点是有序的
2.可以进行跳跃查找(形如二分法)