用c-free写一篇顺序表含有初始化取值查找插入删除代码要包含头文件以及测试代码
时间: 2024-11-17 07:29:09 浏览: 18
C-Free是一种用于教学的轻量级C语言解释器,它允许我们直接在命令行环境中编写并运行简单的C程序。为了演示顺序表的操作(包括初始化、取值、查找、插入和删除),我们需要先创建一个顺序表结构体、相应的函数,并编写一些测试代码。
```c
#include <stdio.h>
#include <stdlib.h> // 用于动态内存分配
// 定义顺序表结构体
typedef struct {
int* elements; // 存储元素的指针
size_t capacity; // 表的最大容量
size_t length; // 当前表的长度
} SequenceList;
// 初始化顺序表
void init_list(SequenceList* list) {
list->elements = (int*)malloc(sizeof(int) * list->capacity);
list->length = 0;
}
// 插入元素
void insert_at_end(SequenceList* list, int value) {
if (list->length == list->capacity) { // 如果已满
list->capacity *= 2; // 扩容一倍
list->elements = (int*)realloc(list->elements, sizeof(int) * list->capacity); // 动态扩容
}
list->elements[list->length++] = value;
}
// 查找元素
int find_index(SequenceList* list, int target) {
for (size_t i = 0; i < list->length; i++) {
if (list->elements[i] == target) return i;
}
return -1; // 如果未找到目标值则返回-1
}
// 删除指定位置的元素
void delete_at_index(SequenceList* list, size_t index) {
if (index >= list->length) return;
memmove(&list->elements[index], &list->elements[index + 1], (list->length - index - 1) * sizeof(int));
list->length--;
if (list->length < list->capacity / 4 && list->capacity > 2) { // 裁剪空间,避免浪费
list->capacity /= 2;
list->elements = (int*)realloc(list->elements, sizeof(int) * list->capacity);
}
}
// 测试代码
int main() {
SequenceList my_list;
init_list(&my_list);
insert_at_end(&my_list, 5);
insert_at_end(&my_list, 10);
printf("Index of 10: %d\n", find_index(&my_list, 10)); // 输出:2
delete_at_index(&my_list, 1); // 删除第一个元素
printf("After deleting 10: %p, length: %zu\n", my_list.elements, my_list.length); // 输出内存地址和剩余元素数
free(my_list.elements);
return 0;
}
```
阅读全文