有序顺序表的范围删除


  1. 从有序表中删除其值在给定值st之间的所有元素,
  2. st不合理或顺序表为空,则显示出错信息并退出运行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "preset.h"

//listBatchDelete范围删除
bool listBatchDelete(SqList &sql, int s, int t) {
if (s > t || sql.length == 0 || t < sql.elem[0] || s > sql.elem[sql.length - 1]) {
return false;
}

int p = 0, q = 0;
while (sql.elem[p] < s) p++; cout << p;
while (sql.elem[q] <= t && q <= sql.length - 1) q++; cout << q;//注意需要特判,for循环写法无需
while (q <= sql.length) {
sql.elem[p] = sql.elem[q];
p++;
q++;
}
sql.length = sql.length - (q - p);

return true;
}

int main () {
SqList sql = {{1, 2, 2, 3, 4, 5, 6, 6, 7, 9}, 10};
cout << "Current SqList: "; print(sql);
int s, t; cin >> s >> t;
if (listBatchDelete(sql, s, t)) cout << "batchDelete the SqList: "; print(sql);
else cout << "error" << endl;
return 0;
}