顺序表插入
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;