顺序表区间删除C语言代码
时间: 2024-09-30 09:14:01 浏览: 18
在C语言中,删除顺序表(数组)中指定区间的元素,你需要遍历整个数组并在目标区间之外更新元素。以下是一个简单的示例代码,用于从已排序的顺序表中删除特定范围内的所有元素:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 顺序表最大容量
#define MIN_SIZE 2 // 区间大小最小限制,防止除零错误
// 顺序表结构体
typedef struct {
int* elements; // 整型指针,指向元素
int size; // 当前元素的数量
int capacity; // 列表最大容量
} SeqList;
// 删除区间函数
void delete_range(SeqList* list, int start, int end) {
if (start < 0 || end >= list->size || start > end) {
printf("Invalid range.\n");
return;
}
// 调整其他元素的位置
for (int i = start, j = start + 1; j <= end; i++, j++) {
list->elements[i] = list->elements[j]; // 将后续元素前移一位
}
// 更新元素计数
list->size -= (end - start + 1); // 减去区间长度
}
// 示例顺序表初始化并打印
void display(SeqList* list) {
for (int i = 0; i < list->size; i++) {
printf("%d ", list->elements[i]);
}
printf("\n");
}
int main() {
SeqList list = {NULL, 0, MAX_SIZE};
list.elements = (int*)malloc(sizeof(int) * MAX_SIZE); // 初始化空数组
// 假设初始元素
list.elements[0] = 1;
list.elements[1] = 2;
list.elements[2] = 3;
list.elements[3] = 4;
list.elements[4] = 5;
list.size = 5;
// 删除区间示例
int start, end;
printf("Enter start and end of the range to delete (separated by space): ");
scanf("%d %d", &start, &end);
// 防止删除空范围
if (start >= end) {
printf("Empty range.\n");
} else {
delete_range(&list, start, end);
display(&list);
}
free(list.elements); // 释放内存
return 0;
}
```
当你运行此程序时,输入起始和结束位置,它会在指定范围内删除元素,并显示修改后的顺序表。