2.1线性表的基本概念
线性表按存储方式的不同,可以划分为顺序表和链表。线性表是具有相同数据类型的n个数据元素的有限序列,n为表长,当n=0时为空表。
线性表是一种逻辑结构,具有以下特点:
表中的元素具有先后次序,具有逻辑上的顺序关系
表中元素的数据类型要相同
表中元素的个数有限
2.2线性表的顺序表示
概念:顺序表是线性表的顺序存储,用一组地址连续的存储单元依次存放线性表中的数据元素,从而使得在逻辑上相邻的数据元素在物理上也相邻。
顺序表的特点是表中元素的逻辑顺序与其物理顺序相同
当要按位查找表中的一个元素的时候不需要遍历,通过首地址和元素序号只需要O(1)就可以得到某一位上的元素,故顺序表具有可以随机访问的优点。
顺序表的基本操作——在指定位置插入元素,平均时间复杂度为O(n)
bool ListInsert(SqList &L,int i,int e){ //在指定位置插入的元素
if(i<1||i>L.length+1){ //插入操作有效范围只能在1到L.length+1之间
return false;
}
if(L.length==MaxSize){ //当前存储空间已满
return false;
}
for(int j=L.length;j>=i;j--){ //当数组里有L.length个元素的时候,数组下标的最后一个是L.length-1
L.data[j] = L.data[j-1]; //循环把每一个元素都赋给后一个位置,直到空出待插入位置
}
L.data[i] = e;
L.length++;
return true;
}
顺序表的基本操作——删除指定位置的元素,平均时间复杂度为O(n)
bool ListDelete(SqList &L,int i,int &e){ //删除指定位置上的元素
if(L.length == 0){ //当前表为空
return false;
}
if(i<1||i>L.length){ //不满足可删除范围
return false;
}
e = L.data[i-1];
for(int j=i-1;j<L.length;j++){ //找到待删除位置,然后逐个把之后的元素覆盖前一个
L.data[i-1] = L.data[i];
}
L.length--;
return true;
}
顺序表的基本操作——顺序查找,平均时间复杂度为O(n)
int LocateElem(SqList L,int e){ //顺序查找元素
for(int i=0;i<L.length+1;i++){
if(L.data[i]==e){
return i+1;
}
}
return false;
}