顺序表插入

1. 检查插入位置和容量

在第 i = 3 个位置插入 x。合法位序包含表尾之后的位置:1 <= i <= length + 1

a1
a2
a3
a4
a5
free
123456
if (index < 1 || index > list->length + 1) return false;
if (list->length >= MaxSize) return false;

2. 从表尾开始后移

后移必须从最后一个有效元素开始。这样每次读取的来源位置还没有被覆盖。

a1
a2
a3
a4
a5
free
data[0]data[1]data[2]data[3]data[4]data[5]
for (int moveIndex = list->length;
     moveIndex >= index;
     moveIndex--) {
    list->data[moveIndex] = list->data[moveIndex - 1];
}

3. 写入新元素并增长表长

i 个位置对应数组下标 i - 1。移动结束后,这个位置空出来给新元素。

a1
a2
x
a3
a4
a5
123456
list->data[index - 1] = value;
list->length++;
return true;