基于数据结构简单实现C语言数组增删改查
基于数据结构简单实现C语言里数组的增删改查
一、使用malloc动态创建可变长一维数组
int main() {
int capacity = 5;
// 这里我们假设数组的长度为5,如果实际输入超过了5个元素,那么数组的长度会自动扩充。
int* arr = (int *)malloc(sizeof(int) * capacity);
int len = 0, digit;
while (1) {
scanf("%d", &digit);
if (digit == -1) {
break;
}
if (len == capacity) {
// 如果数组的长度和假设的长度相等,那么就自动扩充长度
capacity *= 2;
arr = (int *)realloc(arr, sizeof(int) * capacity);
}
arr[len] = digit;
len++;
}
// 遍历输出数组
for (int i = 0; i < len; i++) {
printf("%d ", *(arr + i));
}
}
二、插入元素
代码如下:
// 传入数组,待插入下标,待插入下标值,以及数组长度
void inSert(int* arr, int index, int num, int len) {
for (int i = len; i >index; i--) {
// 数组整体往待插入下标的右边移动
arr[i] = arr[i-1];
}
arr[index] = num;
// 长度自增
len++;
// 重新遍历数组
for(int i=0;i<len;i++){
printf("%d ",arr[i]);
}
}
三、删除元素
// 和插入操作类似
// 传入数组,待删除入下标,以及数组长度
void delArr(int* arr,int index,int len){
for(int i=index;i<=len;i++){
arr[i] = arr[i+1];
}
// 数组长度-1
len--;
for(int i=0;i<len;i++){
printf("%d ",arr[i]);
}
}
三、修改指定下标的值
// 比较简单的操作,直接传入值然后修改即可;
void modify(int* arr, int index, int num){
arr[index] = num;
}
四、删除指定下标的值
// 也是类似的操作
// 传入数组,待删除入下标,以及数组长度
void delArr(int* arr,int index,int len){
for(int i=index;i<=len;i++){
arr[i] = arr[i+1];
}
len--;
for(int i=0;i<len;i++){
printf("%d ",arr[i]);
}
}
总结
昨天刚学完数据结构的数组部分,基于书上的部分代码实现了上述功能,虽然是比较简单的实现,并且我也知道有许多不够严谨的地方,例如数组长度浪费,以及实现插入操作时数组尾部元素“丢失“。大佬们如果有更合适的解决方法,欢迎在评论区里指出来。