数据结构之线性表
导读
线性表是最基本最常见的一种数据结构。线性表是从逻辑上定义的和非线性相对的一种数据结构。线性结构中的元素之间是一对一的关系,而非线性结构中每个元素可能与其他元素有零个或多个关系。
线性表(linear list ):线性表是具有相同特性的数据元素的有限序列。在线性表中,只有一个表头元素和一个表尾元素,其余元素都只有一个直接前驱和一个直接后继。(循环链表是特例)
一、存储结构
线性表在计算机中存储有两种方式,一种是顺序存储方式,一种是链式存储方式。顺序存储的线性表称为顺序表,而链式存储的线性表称为链表。
顺序存储(顺序表):
顺序存储就是按照线性表的逻辑顺序,在物理存储(存到计算机中)的时候依次地将元素存储到连续的地址空间中。也就是逻辑顺序和物理顺序相对应。我们平常使用的数组就是顺序表。
链式存储(链表):
想象这样一个场景,某班学生手拉手地出现在操场上,他们可以横着排、竖着排、或者曲线排,但是不影响他们是一个队列,也就是线性表,其中的关键在于“手拉手”。链表就是类似的结构,除头尾元素外的每个数据元素都能和它的直接前驱和直接后继“手拉手”,这里的手就好比一条链子,将每个元素逻辑串联起来。
在上面的例子中,手拉手这个队列相当于一个链表,那么队列中的人相当于一个节点(node),节点又细分为数据、指针(左指针和右指针,只有右指针的又叫单链表,有左右指针的叫双链表)。(好比人本身、左手和右手)。
二、两种存储结构的比较
顺序表好比一排连续的座位,这些座位的物理位置和该顺序表的逻辑顺序是对应的,比如每个学生按学号入座。所以顺序表的特点显而易见:
(随机访问特性):由于是连续的,所以易查找。
(静态分配):顺序表要求分配连续的空间,所以需要预先进行空间分配。所以顺序表需要扩展时需要再开辟一串连续的空间。
链表和顺序表相对应,由于存储地址不连续,所以不支持随机访问,查找起来也就很慢,但相反地链表支持动态分配。