typedef int elemtype;
typedef struct
{
elemtype* data;
int capacity;//容量
int cursize;//元素的个数
}seqlist;
void Remove_All(seqlist* plist, elemtype val)
{
assert(plist != NULL);
int j = 0;
for (int i = 0; i < plist->cursize; i++)//指针i从头开始遍历
{
if (plist->data[i] != val)
{
plist->data[j] = plist->data[i];//i遍历到的值等于重复值则将i下标遍历到的值赋给j下标遍历到的值
j = j + 1;
}
}
plist->cursize = j;//剩余的值的个数
}
定义两个指针i和j,从头开始遍历,val为重复值,i遍历到的值等于val就继续走,直到不等于val,j再走,然后i位置的值赋给j。
测试
int main()
{
int ar[] = { 12,12,12,34,56,12,12,78 };
int n = sizeof(ar) / sizeof(ar[0]);
seqlist myseq;
for (int i = 0; i < n; i++)
{
push_back(&myseq, ar[i]);
}
PrintSeqlist(&myseq);
Remove_All(&myseq, 12);
}