“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看活动详情”
1.删除操作描述:
删除顺序表中第i个位置上的元素,用变量e来返回删除的值。如果i的输入不合法,直接返回false。否则,将被删除的元素赋值给变量e,并且将第i+1以及后面的元素依次前移一个位置,返回true。
2.删除代码的具体实现
线性表:L;线性表中第i个位置;e:返回删除的元素
bool ListDelete(SqList &L,int i,ElemType &e){
if(i<1||i>L.length)//判断i输入是否合法
return false;
e=L.data[i-1];//将被删除的元素赋值给变量e
for(int j=i;j<L.length;j++)//将第i个位置后的元素前移
L.data[j-1]=L.data[j];
L.length--;//线性表长度减一
return true;
}
3.分析算法的最好情况,最坏情况
- 最好情况:删除表尾元素(也就是i=n),无需移动元素,时间复杂度为。
- 最坏情况:删除表头元素(也就是i=1),需要移动除去表头的所有元素,时间复杂度为。
- 平均情况:需要移动结点的平均次数为。
综上总结:线性表(顺序表)删除算法的平均时间复杂度为。
按值查找
1.按值查找操作描述
在线性表(顺序表)中查找一个元素值等于e的元素,并且返回其次序。
2.按值查找代码具体实现
线性表:L;e:想要查找到的值
int LocateElem(SqList L,ElemType e){
int i;
for(int i=0;i<L.length;i++)
if(L.data[i]==e)
return i+1;
return 0;
}
3.分析算法的最好情况,最坏情况
- 最好情况:查找的元素在表头,只需要比较一次即可,时间复杂度为。
- 最坏情况:查找的元素在表尾或者不存在,需要比较n次,时间复杂度为。
- 平均情况:需要比较的平均次数为:
综上总结:线性表按值查找算法的平均时间复杂度为。
“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看活动详情”