一.算法思想
从数组开始往后扫描不在(s,t)之间的元素,边扫描边统计K,同时将不在(s,t)之间的元素往前移K个位置,最后修改顺序表的长度,实现删除顺序表L中所有不在(s,t)之间的元素
二.源代码
//删除顺序在给定值S和T之间(s<t)的所有元素
void WangDao5DeleteS_T2(List list, int s, int t) {
int k = 0; //记录不在S-T之间元素的个数
if (s >= t || list->Last == -1) {
printf("S,T的取值有误或表为空");
}
//从表头开始扫描,用k记录不在S-T之间元素的个数,若Data[i]的值不在S-T之间,则向前移动K个位置
for (int i = 0; i <= list->Last;i++) {
if (list->Data[i]<s||list->Data[i]>t) {
list->Data[k] = list->Data[i];
k++;
}
}
//修改顺序表长度
list->Last = k - 1;
}