插入需从后往前搬移元素腾出空位,删除需从前往后搬移填补空缺,二者均依赖循环移动数据,且须校验索引有效性。

手动移动数组元素实现插入与删除,核心在于“腾出空位”或“填补空缺”,本质是用循环搬移数据。由于数组长度固定,插入前需确保有足够空间(通常用带冗余容量的数组),删除后逻辑长度减小,但物理空间不变。
插入:从后往前搬移,避免覆盖
要在索引 index 处插入新元素 value,且当前有效元素个数为 size(即下标 0 到 size−1 已存数据),操作前提是 size (还有空位):
- 从最后一个有效位置(size − 1)开始,逐个将元素往后挪一位,直到覆盖到 index 位置为止
- 即:循环执行 array[i + 1] = array[i],i 从 size − 1 递减到 index
- 最后把 value 赋给 array[index],并令 size++
例如:数组 [1, 2, 4, 5](size=4),在 index=2 插入 3,容量足够 → 先挪 5→位置3、4→位置2 → 得 [1, 2, 4, 4, 5](暂态),再填 3 → [1, 2, 3, 4, 5],size 变为 5。
删除:从前往后搬移,覆盖目标位
要删除索引 index 处的元素,且 index (位置合法):
- 从 index + 1 开始,逐个把后续元素往前挪一位,直到最后一个有效元素
- 即:循环执行 array[i − 1] = array[i],i 从 index + 1 递增到 size − 1
- 最后令 size--(逻辑长度减一,原末尾元素不再视为有效)
例如:数组 [1, 2, 3, 4, 5](size=5),删 index=2(即删 3)→ 挪 4→位置2、5→位置3 → 得 [1, 2, 4, 5, 5](末尾残留不影响),size 变为 4,有效部分为 [1, 2, 4, 5]。
边界与安全要点
- 插入前必须检查容量:若 size == array.length,无法插入(除非扩容——那就要新建数组并复制,已超出“手动移动”范畴)
- 索引必须合法:插入时要求 0 ≤ index ≤ size(可插在末尾);删除时要求 0 ≤ index
- 搬移方向不能错:插入时从后往前,否则会重复覆盖;删除时从前向后,否则会丢失数据
- 维护 size 变量:它代表当前有效长度,所有逻辑(如遍历、插入位置上限)都依赖它,而非 array.length
简单代码示意(Java 风格)
假设 int[] arr 和 int size 是类成员:
// 插入
void insert(int index, int value) {
if (size >= arr.length || index < 0 || index > size) return;
for (int i = size; i > index; i--) {
arr[i] = arr[i-1];
}
arr[index] = value;
size++;
}
// 删除
void remove(int index) {
if (index < 0 || index >= size) return;
for (int i = index + 1; i < size; i++) {
arr[i-1] = arr[i];
}
size--;
}

















