顺序表的删除,查找操作

150 阅读2分钟

“开启掘金成长之旅!这是我参与「掘金日新计划 · 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),无需移动元素,时间复杂度为O(1)O(1)
  • 最坏情况:删除表头元素(也就是i=1),需要移动除去表头的所有元素,时间复杂度为O(n)O(n)
  • 平均情况:需要移动结点的平均次数为(n1)/2(n-1)/2

综上总结:线性表(顺序表)删除算法的平均时间复杂度为O(n)O(n)

按值查找

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.分析算法的最好情况,最坏情况

  • 最好情况:查找的元素在表头,只需要比较一次即可,时间复杂度为O(1)O(1)
  • 最坏情况:查找的元素在表尾或者不存在,需要比较n次,时间复杂度为O(n)O(n)
  • 平均情况:需要比较的平均次数为:(n+1)/2(n+1)/2

综上总结:线性表按值查找算法的平均时间复杂度为O(n)O(n)

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 10 天,点击查看活动详情