C语言动态数组进阶:实现核心插入与自动扩容

发布于:2025-09-07 ⋅ 阅读:(17) ⋅ 点赞:(0)

各类资料学习下载合集  

https://pan.quark.cn/s/8c91ccb5a474​

在上一篇博客中,我们成功地为动态数组搭建了“骨架”——设计了结构体并实现了初始化函数。现在,我们的“魔法盒子”已经诞生,但它还是空的。是时候给它注入灵魂,让它能够真正地存放和管理数据了!

今天,我们将聚焦于动态数组最核心的功能:向指定位置插入元素。更酷的是,我们将实现它的“杀手级特性”——当盒子满了之后,它能自动变大

一、 前情回顾:我们的动态数组结构

在开始之前,让我们回顾一下 ​​DynamicArray.h​​ 中定义的结构体和已有的函数:

// DynamicArray.h
#ifndef DYNAMIC_ARRAY_H
#define DYNAMIC_ARRAY_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 我们使用的是通用指针 void*,所以数组类型是 void**
typedef struct {
    void** pAddr;      // 指向真实数据存储区的指针 (数组的元素是 void*)
    int m_capacity;    // 容量
    int m_size;        // 当前大小
} DynamicArray;

// 初始化
DynamicArray* init_DynamicArray(int capacity);

// 销毁
void destroy_DynamicArray(DynamicArray* arr);

// --- 本次新增的函数声明 ---

// 插入
void insert_DynamicArray(DynamicArray* arr, int pos, void* data);

// 遍历
void foreach_DynamicArray(DynamicArray* arr, void (*printCallback)(void*));

#endif

注意,为了通用性,我们将之前 ​​int* pAddr​​ 升级为了 ​​void** pAddr​​,这样我们的数组就可以存放任何类型的指针了。

二、 核心功能:实现插入函数 ​​insert_DynamicArray​

插入操作就像在一排坐满人的椅子中间加一个人。你需要:

  1. 找到要插入的位置。
  2. 让这个位置及之后的所有人,都向后挪一个座位。
  3. 让新来的人坐到空出的位置上。

但在此之前,我们还得考虑一个重要问题:如果整排椅子都满了怎么办?答案是:换一排更长的椅子! 这就是自动扩容。

下面是 ​​insert_DynamicArray​​ 函数的完整实现,我们一步步来解析:

Dynam


网站公告

今日签到

点亮在社区的每一天
去签到