数据结构之线性表
什么是线性表
线性表,全名为线性存储结构。使用线性表存储数据的方式可以这样理解,即“把所有数据用一根线儿串起来,再存储到物理空间中”。
通常,具有一对一关系的数据,最佳的存储方式是使用线性表。
线性表有顺序存储结构和链式存储结构
顺序存储:将数据依次存储在连续的整块空间中,是用一段地址连续的存储单元依次存储线性表的数据元素
链式结构:数据分散的存储在空间中,通过一根线保持它们之间的逻辑关系(一般这根线是用指针实现)
一、顺序存储结构(连续)
说简单点,顺序存储就是在内存中找块地,把一定的内存空间占了,然后通过依次占位的方式,把相同数据类型的数据元素依次存放在这块地上。最常见的就是用数组来实现顺序存储结构。
顺序存储结构需要的属性:
1.存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置
2.线性表的最大存储容量:数组长度MaxSize
在任何时候,实际数组中的元素个数都应小于等于MaxSize
优缺点:
优点:1.不用为表示表中元素之间的逻辑关系而增加额外的存储空间
2.可以快速的存取表中任意位置的元素
缺点:1.插入和删除操作需要移动大量元素,很耗费时间,时间复杂度为O(n)
2.当线性表长度变化较大时,难以确定存储空间的容量
二、链式存储结构(不连续)
顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,比如数组。而链式存储结构,不需要占用一整块存储空间。但为了表示个个节点的关系,也就是数据之间的关系,我们就需要给每个节点加上指针字段,用来存储下一个节点(数据)的存储地址。所以 链式存储结构通常借助于程序设计语言的指针类型来描述.
特点
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。这就意味着,这些数据元素可以存在内存未被占用的任意位置。
定义
在顺序结构中,每个数据元素只需要存数据元素信息就可以了。现在在链式结构中,除了要存数据元素外,还要存储它的后级元素的存储地址。即这样:
typedef struct Node
{
int data;//存储数据
struct Node *pNext;//指向下一个节点的指针
} NODE,*PNODE;
这两部分组成的一个结构体,在连链表中称为结点
优缺点:
优点:插入、删除运算方便。内存地址不连续
缺点:(1).要占用额外的存储空间存储元素之间的关系,存储密度降低。存储密度是指一个节点中数据元素所占的存储单元和整个节点所占的存储单元之比。
(2).链表不是一种随机存储结构,不能随机存取元素。