用c语言实现以下功能:某顺序表中的元素为正整数,输入若干个元素,以-1做结束标记。删除从第i个位置(i>=1)开始的连续k个元素,并输出删除后的顺序表。
时间: 2024-09-22 20:01:27 浏览: 46
在C语言中,实现这个功能需要创建一个顺序表结构体,用于存储正整数,并包含插入、删除和打印操作。下面是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表结构体
typedef struct {
int* data; // 存储元素的指针数组
size_t capacity; // 当前容量
size_t size; // 实际元素个数
} List;
// 动态内存分配和释放函数
void list_init(List* list) {
list->data = (int*)malloc(sizeof(int) * 10); // 初始容量设为10
list->capacity = 10;
list->size = 0;
}
void list_free(List* list) {
free(list->data);
list->data = NULL;
list->capacity = 0;
list->size = 0;
}
// 插入元素到列表尾部
void list_append(List* list, int value) {
if (list->size == list->capacity) {
list->data = (int*)realloc(list->data, sizeof(int) * (list->capacity * 2));
list->capacity *= 2;
}
list->data[list->size++] = value;
}
// 删除从第i个位置开始的连续k个元素
void delete_k_elements(List* list, int i, int k) {
if (i <= 0 || k <= 0 || i + k > list->size) return;
memmove(&list->data[i], &list->data[i + k], sizeof(int) * (list->size - (i + k)));
list->size -= k;
}
// 打印列表
void print_list(const List* list) {
for (size_t i = 0; i < list->size; i++) {
printf("%d ", list->data[i]);
}
printf("\n");
}
int main() {
List list;
list_init(&list);
while (1) {
int value, i, k;
printf("请输入一个整数(-1) break; // 结束标志
list_append(&list, value);
printf("当前列表: ");
print_list(&list);
printf("请输入删除起始位置和连续删除的元素个数: ");
scanf("%d %d", &i, &k);
delete_k_elements(&list, i, k);
printf("删除后列表: ");
print_list(&list);
}
list_free(&list);
return 0;
}
```
这个程序首先初始化一个顺序表,然后循环读取用户输入的值,直到遇到-1为止。每次读取到一个值,就将其添加到列表末尾。然后让用户指定删除的起始位置和连续删除的元素个数,执行删除操作并打印结果。
阅读全文