从顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,若s或t不合理,或顺序表为空,则显示出错信息并退出运行。
时间: 2024-05-09 21:20:31 浏览: 3
算法流程:
1. 判断顺序表是否为空,若为空则显示出错信息并退出运行;
2. 判断s和t是否合法,若不合法则显示出错信息并退出运行;
3. 定义两个指针i和j,分别指向顺序表的第一个元素和最后一个元素;
4. 从左往右遍历顺序表,找到第一个值大于等于s的元素,将其下标记为i;
5. 从右往左遍历顺序表,找到第一个值小于等于t的元素,将其下标记为j;
6. 若i>j,则说明s和t之间没有元素,直接返回;
7. 从i开始,将后面的元素依次向前移动j-i个位置;
8. 修改顺序表的长度,使其减去j-i+1;
9. 返回顺序表。
算法实现:
```
void deleteElements(SeqList &L, ElemType s, ElemType t) {
if (L.length == 0) { // 判断顺序表是否为空
cout << "顺序表为空,无法删除元素" << endl;
return;
}
if (s >= t) { // 判断s和t是否合法
cout << "s和t不合法,无法删除元素" << endl;
return;
}
int i = 0, j = L.length - 1;
while (i < j && L.data[i] < s) { // 找到第一个值大于等于s的元素
i++;
}
while (i < j && L.data[j] > t) { // 找到第一个值小于等于t的元素
j--;
}
if (i > j) { // s和t之间没有元素
return;
}
for (int k = i; k <= j; k++) { // 将后面的元素依次向前移动j-i个位置
L.data[k - i] = L.data[k];
}
L.length = L.length - (j - i + 1); // 修改顺序表的长度
}
```
时间复杂度:O(n),其中n为顺序表的长度。