顺序表的结果设计如下所示

顺序表的结构体设计和头节点的结构体设计如下链接:
来看这个思路分析:

来看代码实现:
void Reamove_all(PSeqList plist, int val) //val就是要再顺序表中删除的数据
{
assert(plist != NULL);
int j = 0;
for (int i = 1; i < plist->cursize; i++)
{
if (plist->data[i] != val)
{
j++;
plist->data[j] = plist->data[i];
}
}
plist->cursize = j + 1;
}
对于上述代码 如果顺序表首个数据是 12 呢 这样的话按照上面的的代码 第一个数据就会被跳过 导致最后结果达不到预期效果
对此 代码该怎么改呢?
方法一:

代码的话 改一下i j的初值就好:
void Reamove_all(PSeqList plist, int val) //val就是要再顺序表中删除的数据
{
assert(plist != NULL);
int j = -1;
for (int i = 0; i < plist->cursize; i++)
{
if (plist->data[i] != val)
{
j++;
plist->data[j] = plist->data[i];
}
}
plist->cursize = j + 1;
}
方法二:

代码实现:
void Reamove_all(PSeqList plist, int val) //val就是要再顺序表中删除的数据
{
assert(plist != NULL);
int j = 0;
for (int i = 0; i < plist->cursize; i++)
{
if (plist->data[i] != val)
{
plist->data[j] = plist->data[i];
j++;
}
}
plist->cursize = j;
}
本文分析了顺序表删除指定元素的代码实现,指出了当顺序表首个元素需要删除时存在的问题,并提出了两种解决方案。方法一是修改循环变量的初始值,从0开始计数;方法二是调整元素复制的时机,先复制后计数。这两种方法都能确保首个元素被正确处理,达到预期的删除效果。
https://blog.youkuaiyun.com/qq_45829112/article/details/120863218
6300

被折叠的 条评论
为什么被折叠?



