数据结构系列(三)线性表

线性表是什么

零个或多个数据元素的有序序列
 

线性存储结构

 
例如
java中的数组,每次都申请固定长度内存空间,并且长度不可变
而arraylist则是长度可变的数组,这是java在底层对数组进行封装,当长度超过原有长度,则会新建一个新的数组,把原有的数组复制过来。当然新的数组的长度也基于默认的扩展算法,当扩展后的数组长度又不够时,再进行之前的操作。所以当能预估出list长度时,初始化最好能指定长度
 
线性存储结构的优缺点
简单来说就是,查询和替换的时间复杂度为O(1),插入和删除的复杂度为O(n),适合长度不变的操作
 

线性表的链式存储结构

例如java的linkedlist
 
 
链式结构与顺序结构存储的优缺点
 

静态链表

结合数组和链表的思想,
基于数组的结构,数组中每个元素都包含数据域和游标(类似指针域),游标则指向下一个元素
而静态两个字体现在数组初始化的时候需要分配一个固定大小的空间
不过感觉这种数据结构作用更大的只是其思想,实际应用很少用到
 

循环链表

应用场景
当一台PC运行多个应用程序时,操作系统通常会把这些程序存入至一个链表,并进行循环遍历,给每个应用程序分配一定的时间来执行。此时循环链表对于OS是很有帮组的,当达到链表尾部时,可以方便的从头部重新开始遍历
 

双向循环链表

顾名思义,在循环链表的基础上,每个元素都包括前一个元素的指针,好处就是查找某个元素的前驱时不用遍历整个链表,也就是用空间换时间的做法。
原文地址:https://www.cnblogs.com/ulysses-you/p/6927105.html