线性表之顺序存储结构--C实现创建增添删除遍历输出和原地逆转
时间: 2024-10-16 17:16:29 浏览: 41
线性表的顺序存储结构是一种最常见的数据结构,它通过连续的内存空间存放元素,每个元素都有一个确定的索引位置。以下是使用C语言实现顺序表的一些基本操作:
**创建顺序表**:
```c
typedef struct {
int *data; // 存储元素的指针
int size; // 当前元素的数量
int capacity; // 容量大小
} List;
// 创建一个新的空列表
List* create_list(int capacity) {
List* list = (List*)malloc(sizeof(List));
if (!list) return NULL;
list->data = malloc(capacity * sizeof(int)); // 分配初始容量
list->size = 0;
list->capacity = capacity;
return list;
}
```
**添加元素(在末尾)**:
```c
void add_element(List* list, int value) {
if (list->size == list->capacity) { // 判断是否已满
list->capacity *= 2; // 若满,扩大容量
list->data = realloc(list->data, list->capacity * sizeof(int));
}
list->data[list->size++] = value; // 添加元素并更新长度
}
```
**删除元素(指定位置)**:
```c
void remove_element(List* list, int index) {
if (index >= 0 && index < list->size) {
for (int i = index; i < list->size - 1; i++) {
list->data[i] = list->data[i + 1];
}
list->size--;
if (index != list->size) free(list->data[index]); // 可选:释放不再需要的空间
} else {
printf("Invalid index.\n");
}
}
```
**遍历输出**:
```c
void print_list(const List* list) {
for (int i = 0; i < list->size; i++) {
printf("%d ", list->data[i]);
}
printf("\n");
}
```
**原地逆转顺序表**:
```c
void reverse_list(List* list) {
int start = 0, end = list->size - 1;
while (start < end) {
int temp = list->data[start];
list->data[start] = list->data[end];
list->data[end] = temp;
start++;
end--;
}
}
```
阅读全文