从顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,如果s或t不合理或顺序表为空,则显示出错信息并退出运行。
①算法思想:扫描顺序表,将s-t之间的元素个数记为k,将不是s-k之间的元素向前移动k个单位
typedef struct seqList {
int n; // 顺序表的当前长度
int maxLength; // 顺序表的最大允许长度
int *element; // 指针element表示顺序表的存储空间的首地址 **等价于 int element[]**
}SeqList; // **Seqlist是类型名,通过SeqList定义相应变量 例如,SeqList L;**
②代码部分先写核心代码进行补充
void deleteElem(Seqlist *L, int s, int t) {
if(s >= t) {
printf("s和t要求不合理,s应该小于t\n");
return;
}
if(L->n == 0) {
printf("空链表,无法删除,不满足要求");
return;
}
int k = 0; // 记录s-t之间的元素个数
for (int i = 0; i < L->n; i++) {
if (L->element[i] >= s && L->element[i] <= t) {
k++;
}
if(L->n == k) { // 如何s-t包含所有的元素,即所有的元素全部删除
L->n = 0; // 删除所有元素
} else {
L-element[i-k] = L->element[i]; // 将删除s-t之间的元素后其他的元素向前移动k个单位
L->n = L->n - k; // L的长度n需要减去k个长度
}
}
}