线性(逻辑)结构的特点:
在数据元素的非空有限集中,(1)存在唯一的一个被称做“第一个”的数据元素;(2)存在唯一的一个被称作“最后一个”的数据元素;(3)除第一个之外,集合中每个数据元素均只有一个前驱;(4)除最后一个外,集合中每个数据元素均只有一个后继。
在稍复杂的线性表中,一个数据元素可以由若干个数据项组成。在这种情况下,常把数据元素称为记录,含有大量记录的线性表又称文件 。
线性表的顺序表示
- 线性表的顺序表示指的是用一组地址连续的存储单元以此存储线性表的数据元素。
- 只要确定了存储线性表的起始位置,线性表的任一数据元素都可以随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。
- 线性表的长度可变,且所需最大存储空间随问题不同而不同,则在C语言中可用动态分配的一维数组表示线性表。(线性表长可变,数组长度不可动态定义,因此可用一变量表示顺序表的长度属性)
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef struct{
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;
线性表的存储位置问题:
假设线性表的每个元素需占用l个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则线性表中第i+1个数据元素的存储位置LOC(a(i+1))和第i个数据元素的存储位置LOC(ai)之间满足下列关系:
LOC(a(i+1))=LOC(a(i))+l;
一般来说,线性表的第i个数据元素a(i)的存储位置为:
LOC(a(i))=LOC(a(1))+(i-1)*l;
插入、删除问题
在线性表的某个位置插入一个数据元素,需要移动的元素次数为:n/2;
在线性表的某个位置删除一个数据元素,需要移动的元素次数为:(n-1)/2;
顺序表的“求表长”和“取第i个数据元素”的时间复杂度均为O(1)
作者:盐盐子