给定一个N个数的数组,M次操作,每次操作为下列操作之一。求最后的数组。 操作1:在第X个数之后插入一个数Y。 操作2:删除第X个数。用c++编写
时间: 2024-05-13 11:14:56 浏览: 282
以下是基于C语言的一个实现,使用了动态数组来存储初始的N个数。每次操作都需要重新分配内存,因此时间复杂度较高,但是可以满足题目要求。
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, m;
scanf("%d %d", &n, &m);
int *arr = (int*)malloc(n * sizeof(int)); // 动态数组
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
for (int i = 0; i < m; i++) {
int op, x, y;
scanf("%d %d", &op, &x);
if (op == 1) {
scanf("%d", &y);
n++; // 数组长度加1
arr = (int*)realloc(arr, n * sizeof(int)); // 重新分配内存
for (int j = n - 1; j > x; j--) { // 将x及其后面的数向后移动一位
arr[j] = arr[j - 1];
}
arr[x + 1] = y; // 插入新数
} else if (op == 2) {
n--; // 数组长度减1
for (int j = x; j < n; j++) { // 将x及其后面的数向前移动一位
arr[j] = arr[j + 1];
}
arr = (int*)realloc(arr, n * sizeof(int)); // 重新分配内存
}
}
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
free(arr); // 释放内存
return 0;
}
```
阅读全文