数据结构_算法实现顺序表相关问题_5

一、问题描述:

从顺序表中删除其值在给定值s与t之间(要求s和t,要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错误信息并退出运行。

二、算法思想:

从前向后扫描顺序表L,用k记录下元素值在s到t之间元素的个数(初始时k=0)。对于当前扫描的元素,若其值不在s到t之间,则前移k个位置;否则执行k++。由于这样每个不在s到t之间的元素仅移动一次,因此算法效率高。

三、算法代码:

bool Del_s_t(SqList &L,ElemType s,ElemType t)
//删除顺序表L中值在给定值s与t(要求s<t)之间的所有元素
{
    
    
	int i,k = 0;
	if(L.length == 0 || s >= t)
		return false;//线性表为空或s、t不合法,返回
	for(i = 0;i < L.length;i++)
	{
    
    
		if(L.data[i] >= s && L.data[i] <= t)
			k++;
		else
			L.data[i - k] = L.data[i];//当前元素前移k个位置
	}
	L.length -= k;//长度减小
	return true;
}

猜你喜欢

转载自blog.csdn.net/qq_56866000/article/details/131934475