刚才我们也谈到,这里的时间复杂度为O(1)。我们现在来考虑,如果我们要实现ListInsert(*L,i,e),即在线性表L中的第i个位置插入新元素e ,应该如何操作?

    插入算法的思路:

    • 如果插入位置不合理,抛出异常;
    • 如果线性表长度大于等于数组长度,则抛出异常或动态增加容量;
    • 从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;
    • 将要插入元素填入位置i处;表长加1。

    实现代码如下:

    1. /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L), */
    2. /* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */
    3. Status ListInsert(SqList *L, int i, ElemType e) {
    4. int k;
    5. /* 顺序线性表已经满 */
    6. if (L->length == MAXSIZE)
    7. return ERROR;
    8. /* 当i不在范围内时 */
    9. if (i < 1 || i >L->length + 1)
    10. return ERROR;
    11. /* 若插入数据位置不在表尾 */
    12. if (i <= L->length) {
    13. /*将要插入位置后数据元素向后移动一位 */
    14. for (k = L->length - 1; k >= i - 1; k--)
    15. L->data[k + 1] = L->data[k];
    16. }
    17. /* 将新元素插入 */
    18. L->data[i - 1] = e;
    19. return OK;
    20. }