线性表04

发布时间 2023-03-24 23:21:42作者: bujidao1128

04.从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并退出运行。
在很多教材中指的"有序",如无特别说明,通常是指“递增有序”。注意本题与上题的区别,因为是有序表,所以删除的元素必然是相连的整体。
算法思想:先寻找值大干或等于s的第一个元素(第一个删除的元素),然后寻找值大于t的第一个元素(最后一个删除的元素的下一个元素),要将这段元素删除,只需直接将后面的元素前移。

//线性表04
bool Del_s_t2(SqList &L,ElemType s,ElemType t)
{
	//删除有序顺序表L中在给定值s于t之间的所有元素 
	int i,j;
	if(s>=t||L.length==0)
	{
		return false;
	}
	for(i=0;i<L.length&&L.data[i]<s;i++);//寻找大于或等于s的第一个元素 
	if(i>=L.length)
	{
		return false;//所有元素值均小于s,返回 
	}
	for(j=i;j<L.length&&L.data[j]<=t;j++);//寻找大于t的第一个元素 
	for(;j<L.length;i++,j++)
	{
		L.data[i]=L.data[j];//前移,填补被删除元素位置 
	}
	L.length=i;
	return true;
 }