建立一个线性表,元素由使用者输入,能够实现插入,删除,以及输出指定位置的元素的功能c语言
时间: 2024-10-16 10:14:54 浏览: 37
在C语言中,你可以创建一个简单的动态数组结构来代表线性表,并提供插入、删除和查找操作。这里是一个基本的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义线性表结构体
typedef struct {
int* elements; // 存储元素的指针
int size; // 当前元素数量
int capacity; // 数组的容量
} List;
// 动态初始化线性表
List* create_list(int capacity) {
List* list = (List*)malloc(sizeof(List));
if (!list) {
printf("Memory allocation failed.\n");
return NULL;
}
list->elements = (int*)malloc(capacity * sizeof(int));
list->size = 0;
list->capacity = capacity;
return list;
}
// 插入元素
void insert(List* list, int index, int value) {
if (index < 0 || index > list->size) {
printf("Invalid index.\n");
return;
}
if (list->size == list->capacity) {
list->capacity *= 2; // 如果满,增加容量
list->elements = (int*)realloc(list->elements, list->capacity * sizeof(int));
if (!list->elements) {
printf("Memory reallocation failed.\n");
free(list);
list = NULL;
return;
}
}
memmove(&list->elements[index+1], &list->elements[index], (list->size - index) * sizeof(int)); // 移动元素
list->elements[index] = value;
list->size++;
}
// 删除元素
void delete(List* list, int index) {
if (index < 0 || index >= list->size) {
printf("Invalid index.\n");
return;
}
memmove(&list->elements[index], &list->elements[index+1], (list->size - index - 1) * sizeof(int)); // 移动元素
list->size--;
if (list->size < list->capacity / 4 && list->size != 0) { // 节省内存空间
list->capacity /= 2;
list->elements = (int*)realloc(list->elements, list->capacity * sizeof(int));
if (!list->elements) {
printf("Memory reallocation failed.\n");
free(list);
list = NULL;
}
}
}
// 输出指定位置的元素
int get_element(List* list, int index) {
if (index < 0 || index >= list->size) {
printf("Invalid index.\n");
return -1; // 返回无效索引标记
}
return list->elements[index];
}
// 清理并释放内存
void destroy_list(List* list) {
free(list->elements);
free(list);
}
int main() {
List* my_list = create_list(5); // 创建列表
// 使用insert(), delete(), 和get_element() 进行操作...
destroy_list(my_list); // 销毁列表
return 0;
}
```
在这个实现中,`create_list()` 初始化线性表,`insert()` 插入元素,`delete()` 删除元素,`get_element()` 获取指定位置的元素,而 `destroy_list()` 用于清理资源。
阅读全文