线性表(Linear List)又称有序表(Ordered List),是数学概念在计算机科学中的一种最基本和简单的数据结构。简单地说,线性表是n个元素的有限序列(n>=0),如26个英文字母组成的字母表;十个阿拉伯数字组成的数列;这些都是线性表。由此可见,线性表的元素可以是任何一种数据类型,但是同一数据表的数据类型必须一致。
线性表中,除了第一个元素a(1)外,任何元素都有唯一的前驱(precessor);除了最后一个元素a(n)外,任何元素都有唯一的后继(successor)。
按照在计算机中内存存储的方式,线性表分为:顺序存储和链式存储。
顺序存储(静态数据结构)
它是一种将有序列表的数据使用连续分配空间进行存储的方式,也就是说顺序存储中两个相邻元素在内存中也是相邻的,这是顺序存储区别于链式存储的根本原因。数组类型就是典型的顺序存储方式。优点是查询的时间复杂度为O(1),通过首地址和偏移量就可以直接访问到某元素。缺点是插入和删除的时间复杂度最坏能达到O(n),如在第一个位置插入一个元素,你需要把数组的每一个元素向后移动一位,删除元素以此类推。另外,顺序存储中,内存在编译时就要分配给相关的变量。因此数组在建立初期,必须事先声明最大可能的固定存储空间,势必造成内存的浪费。链式存储(动态数据结构)
它是一种将有序列表的数据使用不连续存储空间来存储的方式。例如指针就是典型的链式存储,每一个元素都有一个指针域,指针域存储到下一个元素的指针。链表也是典型的链式存储方式。链式存储的动态存储特点使得它具有和顺序存储截然相反的优缺点。优点是插入和删除元素的时间复杂度为O(1),不会移动大量数据。动态结构的内存分配在执行时才发生,不需要事先声明,能够充分节省内存。缺点是访问的时间复杂度最坏为O(n),关于查找的算法很少,一般只能遍历。
总之,顺序存储和链式存储各有优缺点,要根据实际情况选取存储方式。