数据结构与算法基础——第02周-线性表的顺序表示和实现-插入算法(2.4.5)
一 概述
- 顺序表的插入—演示
- 顺序表的插入—算法思想
- 顺序表的插入—代码实现
- 顺序表的插入—算法分析
二 顺序表的插入—插入不同位置演示
三 顺序表的插入—算法思想
3.1 插入描述
线性表的插入运算是指在表的第i(1<=i<=n+1)个位置上,插入一个新节点e,使长度为n的线性表(a1,...,ai-1,ai,...an)变成长度为n+1的线性表(a1,...ai-1,e,ai,...,an)
3.2 算法思想
- 判断插入位置i是否合法
- 判断顺序表的存储空间是否已满,若已满返回ERROR。
- 将第n至第i位的元素依次向后移动一个位置,空出第i个位置
- 将要插入的新元素e放入第i个位置
四 顺序表的插入—代码实现
1 | Status ListInsert_Sq(SqList &L,int i,ElemType e) |
五 顺序表的插入—算法分析
算法时间主要耗费在移动元素的操作上
- 若插入在尾结点之后,则根本无需移动(特别快)
- 若插入在首结点之前,则表中元素全部后移(特别慢)
- 若要考虑在各种位置插入(共n+1种可能)的平均移动次数,该如何计算?
Eins=1/(n+1)∑n+1i=1(n-i+1)=1/(n+1)*(n+...+1+0)=1/(n+1)*(n*(n+1)/2)=n/2 - 顺序表插入算法的平均时间复杂度为O(n)