线性表删除操作的算法思路
1.如果删除的位置不合理,抛出异常
2.去除删除元素
3.从删除元素位置开始遍历到最后一个元素位置,分别将他们都向前移动一个元素
4.表长度减一
//删除操作
Status DeleatElem(sqlist *l,int i)
{
if ((i<1)||(i>MAXSIZE))
{
return err;
}
if (l->length==MAXSIZE)
{
return err;
}
if (i<=l->length)
{
for (k = i+1; k <= l->length-1; k++)
{
l->data[k-1]=l->data[k];
}
}
l->length--;
}
分析一下删除的时间复杂度:
最好的情况是:删除操作刚好在求要的第一个元素,所以不需要移动任何元素,时间复杂度为O(1)
最坏的情况:删除操作刚好在最后一个元素,需要移动所有的元素,时间复杂度为O(n)
至于平均情况:取中间值(n-1)/2.。则化简为n
总结:
线性表的顺序存储结构:在存和读的时候,不管在哪个位置,时间复杂度都是O(1),在删除和插入时时间复杂度都为O(n)。
这说明它比较适合元素个数比较稳定的,不经常插入和删除元素,更多的是存取数据的应用。