优化代码:
void SeqListRemoveAll(SeqList* psl, SLDataType x)
{
int gap = 0, i;
for (i = 0; i < psl->size; i++)
{
if (psl->array[i] == x)
{
gap++;
}
else
{
psl->array[i - gap] = psl->array[i];
}
}
psl->size -= gap;
}
下图是初始版本,还存在一定的BUG
修改后:
void SeqListRemoveAll(SeqList* psl, SLDataType x)
{
int gap = 0;
int i;
for (i = 0; i < psl->size - gap; i++)
{
if (psl->array[i + gap] == x)
{
if (psl->array[i + gap] == psl->array[i + gap + 1])
{
i--;
gap++;
continue;
}
gap++;
if (i + gap >= psl->capacity)
{
break;
}
}
psl->array[i] = psl->array[i + gap];
}
psl->size -= gap;
}