题目:在长度为n的线性表A的第i个位置插入一个新数据元素item。
解题思路:
首先,判断线性表是否已满。如果未满,还要测试插入的位置是否合适,合法的插入位置应该是1<=i<=n+1。出现任何一种异常,插入操作都将失败。
其次,如果满足插入条件,具体插入过程分为以下3步:
- 将线性表的第i个数据源数到第n个数据元素之间的所有元素依次向后移动一个位置(共移动n-i+1个元素)
- 将新的item元素插入到线性表的第i个位置上。
- 修改线性表的长度为n+1.
需要注意的是数据元素依次后移一个位置的方向,必须是从表的末尾元素开始后移,直到将第i个位置的元素后移一个位置为止。
具体算法实现如下:
let maxsize = 100 //假设线性表的开辟的空间为100
myarray = {
data : new Array(maxsize),
length :0,
}
function insert(A, i, item){
let n = A.length
if ( n==maxsize || i<1 || i>n+1 ) {
return "表格或插入位置不正确!"
}
for (let j = n-1; j >= i-1; j--) {
A.data[j+1] = A.data[j]
}
A.data[i-1] = item
A.length++
return A
}
insert(myarray, 1, 'a')
性能
最好的情况是不移动数据。最坏的时间复杂度为O(n)。