用C语言定义一个顺序表,不用指针
时间: 2024-09-13 18:01:09 浏览: 40
在C语言中,虽然通常我们会用指针来操作数组,但如果你不想直接使用指针,可以使用数组来模拟顺序表。下面是一个简单的例子,定义了一个动态大小的顺序表结构体,它包含一个整数类型的数组以及两个辅助变量:元素个数和数组最大容量:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表结构体
typedef struct {
int capacity; // 最大容量
int size; // 当前元素个数
int list[1]; // 隐藏的数组,第一个元素预留
} List;
// 初始化顺序表
List* create_list(int capacity) {
List* lst = (List*)malloc(sizeof(List));
lst->capacity = capacity;
lst->size = 0;
lst->list[0] = -1; // 初始值设为-1,表示未初始化
return lst;
}
// 添加元素到列表
void add_element(List* lst, int value) {
if (lst->size == lst->capacity) { // 如果已满
lst->capacity *= 2; // 扩容一倍
lst->list = (int*)realloc(lst->list, sizeof(int) * lst->capacity);
}
lst->list[lst->size++] = value; // 增加元素并更新大小
}
// 删除最后一个元素
void remove_last_element(List* lst) {
if (lst->size > 0) {
lst->size--;
lst->list[lst->size] = -1; // 清空最后一个位置
}
}
// 显示列表内容
void print_list(const List* lst) {
for (int i = 0; i < lst->size; i++) {
printf("%d ", lst->list[i]);
}
printf("\n");
}
int main() {
List* my_list = create_list(5);
add_element(my_list, 10);
add_element(my_list, 20);
print_list(my_list); // 输出:10 20
remove_last_element(my_list);
print_list(my_list); // 输出:10
free(my_list);
return 0;
}
```
这个版本的顺序表实现了基本的操作如创建、添加和删除元素,但没有提供删除指定位置元素的功能,因为不使用指针会相对复杂。
阅读全文