在指定索引位置前插入一个数字
方法一:使用动态数组
#include <stdio.h>
#include <stdlib.h>
void insertAt(int *arr, int *size, int index, int value) {
int i;
(*size)++;
arr = (int*)realloc(arr, (*size) * sizeof(int));
for (i = (*size)-1; i > index; i--) {
arr[i] = arr[i-1];
}
arr[index] = value;
}
int main() {
int *arr = NULL;
int size = 0;
int i;
// 初始化数组
for (i = 0; i < 5; i++) {
insertAt(arr, &size, i, i+1);
}
// 在索引位置2前插入数字10
insertAt(arr, &size, 2, 10);
// 输出数组
for (i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
方法二:使用静态数组
#include <stdio.h>
#define MAX_SIZE 10
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;
}
int main() {
int arr[MAX_SIZE] = {1, 2, 3, 4, 5};
int size = 5;
int i;
// 在索引位置2前插入数字10
insertAt(arr, &size, 2, 10);
// 输出数组
for (i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
删除指定索引位置的数组元素
方法一:使用动态数组
#include <stdio.h>
#include <stdlib.h>
void deleteAt(int *arr, int *size, int index) {
int i;
for (i = index; i < (*size)-1; i++) {
arr[i] = arr[i+1];
}
(*size)--;
arr = (int*)realloc(arr, (*size) * sizeof(int));
}
int main() {
int *arr = (int*)malloc(5 * sizeof(int));
int size = 5;
int i;
// 初始化数组
for (i = 0; i < size; i++) {
arr[i] = i+1;
}
// 删除索引位置2的元素
deleteAt(arr, &size, 2);
// 输出数组
for (i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
方法二:使用静态数组
#include <stdio.h>
void deleteAt(int *arr, int *size, int index) {
int i;
for (i = index; i < (*size)-1; i++) {
arr[i] = arr[i+1];
}
(*size)--;
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int size = 5;
int i;
// 删除索引位置2的元素
deleteAt(arr, &size, 2);
// 输出数组
for (i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
优缺点
动态数组的优点
- 可以动态调整数组大小,适用于需要频繁插入和删除操作的场景。
- 内存利用率高,可以根据需要动态分配内存。
动态数组的缺点
- 插入和删除操作可能会导致数组元素的频繁移动,影响性能。
静态数组的优点
静态数组的缺点
- 大小固定,无法动态调整,不适用于频繁插入和删除操作的场景。