题目:
已知一组数据,采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素。
输入格式:
输入包含三行数据,第一行是表中元素个数,第二行是顺序表的各个元素,第三行是区间x和y。
输出格式:
删除元素值在[x,y]之间的所有元素后,输出新的顺序表。(最后无空格)
输入样例:
10
55 11 9 15 67 12 18 33 6 22
10 20
输出样例:
55 9 67 33 6 22
代码:
#include <stdio.h>
// 定义删除函数
void delete (int list[], int *n, int x, int y) {
// 定义删除后顺序表的索引,在遍历删除元素后,new_size就成为删除元素后顺序表的长度
int new_size = 0;
// 遍历删除区间内的元素
for (int i = 0; i < *n; i++) {
if (list[i] < x || list[i] > y) {
list[new_size] = list[i];
new_size++;
}
}
// 赋值删除后顺序表的长度
*n = new_size;
}
int main() {
// 定义顺序表长度
int n;
scanf("%d", &n);
// 建立顺序表
int list[100];
for (int i = 0; i < n; i++) {
scanf("%d", &list[i]);
}
// 输入要删除元素的区间
int x, y;
scanf("%d %d", &x, &y);
// 由于在进行删除元素后,要使用删除后数组的长度进行遍历,因此数组长度需要传址
delete (list, &n, x, y);
// 遍历删除元素后的顺序表
for (int i = 0; i < n; i++) {
printf("%d", list[i]);
if (i < n - 1) {
printf(" ");
}
}
printf("\n");
return 0;
}