线性表插入删除
2018-07-23 本文已影响0人
xcreal
Status ListInsert(SqlList *L, int i, ElemType e)
{
int k;
if (L->length == MAXSIZE)//顺序线性表已满
return ERROR;
if (i<1 || i>L->length + 1)//当i不在范围时
return ERROR;
if (i <= L->length)//若插入数据位置不在表尾
{
for (k = L->length - 1; k >= i - 1; k--)//将要插入位置后数据元素向后移动一位
L->data[k + 1] = L->data[k];
}
L->data[i - 1] = e;
L->length++;
return OK;
}
Status ListDelete(SqlList *L, int i, ElemType *e)
{
int k;
if (L->length == 0)//线性表为空
return ERROR;
if (i<1 || i>L->length)
return ERROR;
*e = L->data[i - 1];
if (i < L->length)//如果删除不是最后位置
{
for (k = i; k < L->length; k++)//将删除位置后继元素前移
L->data[k - 1] = L->data[k];
}
L->length--;
return OK;
}
顺序存储结构优点
1.无须为表示表中元素之间的逻辑关系而增加额外的存储空间
2.可以快速的存取表中任意一元素的位置
缺点:
1.插入和删除操作需要移动大量元素
2.当线性表长度变化较大时,难以确定存储空间的容量
3.造成存储空间的碎片