顺序表的定义
用一组地址连续的存储单元依次存储线性表的每个数据元素,这种存储结构称为线性表的顺序存储结构,用这种结构表达是线性表称为顺序表。
顺序表的特点
用数据元素在计算机内物理位置相邻来表示线性表中数据元素之间的逻辑关系。
顺序表的存储位置
顺序表中第 i 个数据元素ai的存储位置:
LOC(ai)=LOC(a1) + ( i - 1 ) x m
其中,LOC(a1)为顺序表的首地址;m为顺序表中一个数据元素占用的存储空间。
顺序表为随机存储结构(读取数据元素所需要的时间与其所在的位置无关)。
顺序存储结构内存视图
顺序表的C++语言描述
#define MaxSize 100
typedef int ElemType;//声明顺序表的元素类型
typedef struct
{
ElemType data[MaxSize];//存放顺序表数据
int length;
}SqList;//SqList为用户定义的顺序表类型
MaxSize表示顺序表中最多元素个数;
ElemType是一个抽象类型。在实现时,要定义为具体的数据类型。如:typedef char ElemType;
length表示顺序表的当前表长,非负值且<=MaxSize。
SqList my_list; //定义顺序表类型的变量my_list
SqList 顺序表数据类型
my_list SqList类型的实例化变量my_list拥有两个数据域:
- 数组:data 存放顺序表数据
- 变量:length 保存顺序表数据个数
顺序表的基本操作
初始化顺序表
void InitList(SqList &L)
{
L.length = 0;
}
时间复杂度:O(1)
- 在InitList()函数中,需要改变顺序表的length域的值,因此参数L使用引用传递。(引用:变量的别名)。
- 设计函数时,根据需要决定参数传递的方式。
求顺序表中当前元素个数
int ListLength(SqList L)
{
return L.length;
}
时间复杂度:O(1)
判断顺序表是否为空