算法思路一:遍历表中所有元素,将具有值不属于[a,b]的元素重新按照顺序存入原来的表
//顺序表结构
typedef struct {
int data[MaxSize];
int length;
}SqList;
typedef int ElemType;//假设元素类型为int
bool Delete_a_to_b(SqList& L,ElemType a, ElemType b) {
if (a > b || L.length == 0) { //判断a,b的值是否合法,并确保表不为空
return false;
}
int j = 0,i;
for (i=0; i < L.length; j++) { //将值小于a和值大于b的元素储存到原来的表中,覆盖旧元素
if (L.data[i]<a || L.data[i]>b) {
L.data[j] = L.data[i];
j++;
}
}
L.length = j; //更新表的长度为j
return true;
}
算法思路二:遍历表中所有元素,用k记录下元素值属于[a,b]的元素个数,对于值不属于[a,b]的元素,对其进行前移k个位置,否则k++
//顺序表结构
typedef struct {
int data[MaxSize];
int length;
}SqList;
typedef int ElemType;//假设元素类型为int
bool Delete_a_to_b2(SqList& L, ElemType a, ElemType b) {
if (a > b || L.length == 0) { //判断a,b的值是否合法,并确保表不为空
return false;
}
int k = 0, i;
for (i = 0; i < L.length; k++) {
if (L.data[i] >= a && L.data[i] <= b) {
k++;
}
else
{
L.data[i - k] = L.data[i]; //将元素前移k个位置
}
}
L.length -= k; //更新表的长度
return true;
}