线性表的顺序实现C语言代码
时间: 2024-10-12 07:06:41 浏览: 24
线性表顺序结构c语言实现
线性表的顺序实现通常会涉及到数组结构。下面是一个简单的单向链表在C语言中的顺序存储(数组实现)的例子,这里我们创建了一个动态大小的数组作为数据结构:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义线性表节点结构体
typedef struct {
int data; // 数据域
int next_index; // 指示下一个元素的索引
} Node;
// 动态数组实现的线性表
typedef struct {
Node* array; // 数组指针
int size; // 当前元素个数
int capacity; // 数组最大容量
} LinearList;
// 初始化线性表
LinearList* create_list(int capacity) {
LinearList* list = (LinearList*)malloc(sizeof(LinearList));
list->array = (Node*)malloc(capacity * sizeof(Node));
list->size = 0;
list->capacity = capacity;
for (int i = 0; i < capacity; i++) {
list->array[i].data = -1; // 初始化为无效值
list->array[i].next_index = -1;
}
return list;
}
// 插入元素到列表末尾
void insert_at_end(LinearList* list, int value) {
if (list->size == list->capacity) {
// 扩容处理
list->capacity *= 2; // 新容量通常是原容量的两倍
Node* new_array = realloc(list->array, list->capacity * sizeof(Node)); // 重新分配内存
list->array = new_array;
}
list->array[list->size].data = value;
list->array[list->size].next_index = list->size + 1;
list->size++;
}
// 打印列表内容
void print_list(LinearList* list) {
printf("List elements: ");
for (int i = 0; i < list->size; i++) {
printf("%d ", list->array[i].data);
}
printf("\n");
}
int main() {
LinearList* list = create_list(5);
insert_at_end(list, 10);
insert_at_end(list, 20);
insert_at_end(list, 30);
print_list(list); // 输出: List elements: 10 20 30
free(list->array);
free(list);
return 0;
}
```
这个例子中,`create_list()`函数初始化数组,`insert_at_end()`函数用于添加元素,而`print_list()`则展示了如何遍历并打印列表。注意,在实际应用中,为了更好地管理内存,你需要在不再需要线性表时手动释放数组内存。
阅读全文