天天看點

資料結構408考研綜合題線性表(四)【題目描述】從有序順序表中删除其值在給定值s與t之間(要求是s<t)的所有元素,若s或t不合理或者順序表為空,則顯示出錯資訊并退出運作。

【題目描述】從有序順序表中删除其值在給定值s與t之間(要求是s<t)的所有元素,若s或t不合理或者順序表為空,則顯示出錯資訊并退出運作。

/*算法思想;
先尋找大于等于s的第一個元素(第一個删除的元素),
然後尋找值大于t的第一個元素(最後一個删除元素的下一個元素),
要将這段元素删除,隻需要将後面的元素前移。*/
#define MAXSIZE 100
typedef int Elemtype;
typedef struct {
	int length;
	Elemtype data[MAXSIZE];
}Sqlist;

bool Del_s_t2(Sqlist &L, Elemtype s, Elemtype 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;
}
           

繼續閱讀