2.2 线性表的顺序实现——顺序表
顺序表用一组地址连续的存储单元依次存储线性表中的数据元素。其特点是表中的逻辑顺序与其物理顺序相同。
2.2.1 初始化
其结构体定义如下:
#define iniSize 100
typedef int ElemType;
typedef struct
{
ElemType *data;
int maxSize,length;
} seqList;
采用动态分配:
//C的初始动态语句分配为
L.data = (ElemType*)malloc(sizeof(ElemType)*iniSize);
//C++的初始动态语句分配为
L.data = new ElemType[iniSize];
2.2.2 顺序表上基本操作实现
(1) 插入操作
在顺序表L的第i个位置插入新元素e。顺序表的第i个元素及其后面所有元素都右移一位。其平均时间复杂度为O(n)。
顺序表L的第i个位置,即数组中的第i-1个位置。
//插入
bool ListInsert(seqList &L,int i,ElemType e)
{
if(i<1||i>(L.length+1)) //判断i是否在有效范围内
{
return false;
}
if(L.length>=L.maxSize) //存储空间满
{
return false;
}
int j;
for (j = L.length-1; j>=i-1; j--)
{
L.data[j+1] = L.data[j];
}
L.data[i-1] = e;
L.length++; //记得长度加1
return true;
}
(2) 删除操作
删除顺序表L的第i个位置元素e。顺序表的第i个元素后面所有元素都坐移一位。其平均时间复杂度为O(n)。
//删除第i位置的元素,并用e返回删除元素的值
bool ListDelete(seqList &L,int i,ElemType &e)
{
if(i<1||i>(L.length+1))
{
return false;
}
e = L.data[i-1];
int j;
for (j = i-1; j<=L.length-2;