引出
eg:删除顺序表中元素为3的元素
假如说3在顺序表中只有一个,解题方法可以是让3后面的元素依次向前移动,时间复杂度为O(n)。如果3在线性表中有多个,那么就需要碰到一个3就将3后面的元素移动到前面去,知道3被删除完,这个的时间复杂度为O(n^2).
所以我们需要一个简单的方法来让顺序表快速删除元素
方法
假如有以下顺序表:
删除其中为3的元素:
void Dele3(List* L, int num) {
int i, k = 0;
for (i = 0; i < L->length; i++) {
if (L->data[i] != num) {
L->data[k] = L->data[i];
k++;
}
}
L->length = k;
}
当L->data[i] != num的时候k就加一,当等于的时候就不动。这样就可以保证当k遇到第一个空白位时,以后的每一个k都指向需要填充的位置。