题目:
已知一组数据,采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[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;
}