一、顺序表的插入操作
在顺序表中进行插入操作时,因为顺序表是一个有序且有长度的序列,例如在第四个和第五个之间插入一个元素,那么从五到顺序表最后一个元素依次向后移动一个位置,表长加一,顺序表的插入操作总结如下:
- .将第n个至第i个位置的元素顺序向后移动一个位置,为新元素空出第i个位置
- 将x置入空的第i个位置
- 表长加一
int insert_SeqList (SeqList &L,ElemType x,int i){/*定义插入操作和一个要插入的元素x和位置i*/
int k;
if(i<0||i>L.length||L.length=MAXSIZE)//如果插入位置不在表中则返回0
return 0;
}
else{
for(k=L.length;k>=i;k--)
L.data [k]=L.data [k-1]//将前一个元素值给后一个
L.data[i]=x;//将x插入到第i个元素
L.length=Length+1;//表长加一
return 1;
}
时间复杂度为O(n),算法如下:
插入操作时间消耗主要在移动元素上,第i个元素需要移动n-i+1个元素,而1<=i<=n,即有n+1个位置可以插入,所以假设在第i个元素前插入的概率为p,平均移动的次数为E:
E=Σ(上 n+1,下 i=1)p(n-i+1)
假设在线性表上任何位置插入元素是相等的概率
p=1/(n+1)
E=1/(n+1)Σ(上 n+1,下 i=1)p(n-i+1)=n/2
所以时间复杂度为O(n)
二、顺序表的删除操作
线性表的删除操作是将表中第i个元素从表中删掉,删除后的原表长为n-1
int Delete_SeqList (SeqList &L,int i){
int k;
if(i<0 ||i>=L.length)
return 0;
else{
for(k=i;k<i.lenght;k--){
L.data[k]=L.data[k+1];
L.length--
}
}
}
三、顺序表的查找操作
直接按下角标进行查找
int Delete_SeqList (SeqList &L,int i){
int k;
if(i<0 ||i>=L.length)
return 0;
else{
for(k=i;k<i.lenght;k--){
L.data[k]=L.data[k+1];
L.length--
}
}
}