PTA(顺序表)2-6 顺序表(删除)

2-6 顺序表(删除)

分数 6

作者 邵煜

单位 宁波财经学院

已知一组数据,采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素

输入格式:

输入包含三行数据,第一行是表中元素个数,第二行是顺序表的各个元素,第三行是区间x和y。

输出格式:

删除元素值在[x,y]之间的所有元素后,输出新的顺序表。(最后无空格)

输入样例:

在这里给出一组输入。例如:

1
2
3
10
55 11 9 15 67 12 18 33 6 22
10 20

输出样例:

在这里给出相应的输出。例如:

1
55 9 67 33 6 22

答案

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
using namespace std;

// 定义顺序表结构
typedef struct {
int *data;
int length;
} sqList;

void initList(sqList &L, int n) {
L.data = new int[n];
L.length = 0;
}

// 删除下标为i的元素
void deleteElem(sqList &L, int i) {
for (int j = i; j < L.length-1; ++j) {
L.data[j] = L.data[j+1];
}
L.length--;
}

int main() {
int n;
cin >> n;
sqList L;
initList(L, n);
// 读取顺序表中的元素
for (int i = 0; i < n; ++i) {
cin >> L.data[i];
L.length++;
}

int x, y;
cin >> x >> y;
// 判断顺序表中每个数是否属于区间
int i = 0;
while (i != L.length) {
if (L.data[i] >= x && L.data[i] <= y) {
deleteElem(L, i);
} else {
i++;
}
}
// 输出新的顺序表
for (int j = 0; j < L.length; ++j) {
if (j != 0) {
cout << " ";
}
cout << L.data[j];
}
}
  • 注意输入顺序