题目:从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素,若s或t 不合理或顺序表为空,则显示出错信息并退出运行。
思路:与删除单个值思路类似,也是把符合范围的数记录下来。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define InitSize 10
typedef struct {
int* data;
int length;
int MaxSize;
}SeqList;
bool InitList(SeqList* L) {
L->data = (int*)malloc(sizeof(int) * InitSize);
if (L->data == NULL)
return false;
L->length = 0;
L->MaxSize = InitSize;
return true;
}
bool DelRange(SeqList* L, int left, int right) {
if (L->length == 0 || left >= right)
return false;
int k = 0;
for (int i = 0; i < L->length; i++) {
if (L->data[i] >= left && L->data[i] <= right)
k++;
else
{
L->data[i - k] = L->data[i];
}
}
L->length -= k;
return true;
}
int main()
{
SeqList L;
InitList(&L);
for (int i = 0; i < L.MaxSize; i++) {
scanf("%d", &L.data[i]);
L.length++;
}
int s, t;
printf("请输入删除的范围:\n");
scanf("%d %d", &s, &t);
if (DelRange(&L, s, t)) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
}
return 0;
}