线性表的概念
线性表是多个具有相同特性的数据元素组成的有限序列,线性表是最基本、最简单、也是最常用的一种数据结构,例如顺序表,链表,栈,队列,字符串等都属于线性表。线性表在逻辑是是线性结构,但物理结构上并不一定是连续的,通常是数组和链式结构的形式储存。 
顺序表的概念
顺序表是物理地址连续的存储单位依次存放元素的线性结构,逻辑结构与物理结构一致,在其物理结构上完成增删查改,最大优点是按下标进行随机访问,cpu高速缓存命中率较高,顺序表分为静态顺序表与动态顺序表。 
顺序表缺陷
- 动态增容有性能的消耗,当增容时后面物理地址足够时直接开辟空间增容,当增容时后面物理地址不够时要先开辟空间再拷贝数据再释放旧空间
- 增容时一般会有一定程度的空间浪费,大多情况下会直接增容2倍而不是按需分配
- 当头部插入数据时,效率低,首先要将数据后移,再头部插入数据,效率O(n)
顺序表实现代码百度网盘链接 提取码:SeqL
链表的概念
链表是物理结构非连续,非顺序的存储结构,而逻辑结构是线性结构,逻辑顺序是通过指针链接各个数据元素。链表分为8类是以下3种的所有组合,单向or双向,带头or不带头,循环or非顺序,即单向带头循环,单向带头非循环,单向不带头循环,单向不带头不循环,双向带头循环,双向带头非循环,双向不带头循环,双向不带头不循环。链表的最大优点是可以按需索取。 
常用到的2种是无头单向非循环链表与带头双向循环链表
无头单向非循环链表
无头单向非循环链表结构简单一般不单独存储数据,而是作为其他数据结构的子结构。 
无头单向非循环链表实现代码百度网盘链接 提取码:List
带头双向循环链表
带头双向循环链表结构较复杂单独存储数据,链表的结束标志就是回到头节点,一般用到的链表都是该结构。该链表结构虽然复杂但实现起来是最简单的。 
双向链表实现代码百度网盘链接 提取码:List
|