Description
给出一个包含N个数的序列,对这个序列进行增删和打印操作。
Input
输入包含T组测试数据。
开头是一个正整数T (0<T<10),为测试数据数量。
对于每组测试数据,第一行是一个正整数N (0<N<=100000)。
第二行是N个正整数,代表这个序列中的N个元素。每个元素均小于10000。
第三行是一个正整数Q (0<Q<=20) 代表操作次数。接下来有Q行,若为增添操作,格式为“U i j”,表示在下标(以0开始)为i的元素前插入一个j,若为删除操作,则格式为“D i”,表示删除下标(以0开始)为i的元素,若为打印操作,直接为一个字母“P”,表示将当前序列输出到屏幕上。系统保证输入的下标均合法(下标不会指向一个不存在的元素)。
Output
每次操作完成后都将新序列输出,数列间的每一个元素用空格隔开,最后一个元素后面不能有空格。
每组测试数据之后加一个空行。
这道题不难但对于数组的理解和处理很行(不会处理方法的朋友,见我以前的博客),直接给代码:
#include<stdio.h>
int a[100001];
void insertAt(int* arr, int* size, int index, int value) {
int i;
(*size)++;
for (i = (*size) - 1; i > index; i--) {
arr[i] = arr[i - 1];
}
arr[index] = value;
}
void deleteAt(int* arr, int* size, int index) {
int i;
for (i = index; i < (*size) - 1; i++) {
arr[i] = arr[i + 1];
}
(*size)--;
}
void Poperate(int* arr, int size) {
for (int i = 0; i < size - 1; i++) {
printf("%d ", arr[i]);
}
printf("%d",arr[size-1]);
printf("\n");
}
int main() {
int t, n,i,j;
int m;
char chaozhou;
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
scanf("%d", &m);
while (m--) {
scanf(" %c", &chaozhou);
if (chaozhou == 'U') {
scanf("%d %d", &i, &j);
insertAt(a, &n, i, j);
}
if (chaozhou == 'D') {
scanf("%d", &i);
deleteAt(a, &n, i);
}
if (chaozhou == 'P') {
Poperate(a, n);
}
}
printf("\n");
}
return 0;
}