c语言动态数组实现静态链表代码示例
时间: 2024-10-16 09:10:51 浏览: 39
在C语言中,动态数组(数组长度可以运行时确定)通常用于实现动态数据结构,如链表。然而,标准库并未直接提供动态数组功能,我们通常会通过malloc()函数动态分配内存来创建链表节点。这里是一个简单的动态数组实现动态链表的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 动态数组的实现(作为链表节点)
Node** createDynamicArray(size_t capacity) {
// 分配初始容量的内存
Node** array = malloc(capacity * sizeof(Node*));
if (array == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
for (size_t i = 0; i < capacity; i++) {
array[i] = NULL;
}
return array;
}
// 插入节点到链表
void insert(Node** array, size_t index, int value) {
if (index >= array[0]->next == NULL && index > array[0]) {
printf("Index out of range.\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = array[index];
array[index] = newNode;
}
// 遍历并打印链表
void traverse(Node** array) {
for (Node* node = array[0]; node != NULL; node = node->next) {
printf("%d ", node->data);
}
printf("\n");
}
int main() {
const size_t capacity = 5;
Node** dynamicList = createDynamicArray(capacity);
insert(dynamicList, 0, 1); // 插入第一个元素
insert(dynamicList, 2, 3); // 插入第三个元素
traverse(dynamicList); // 输出链表内容
// 释放内存
for (size_t i = 0; i < capacity; i++) {
if (dynamicList[i] != NULL) {
free(dynamicList[i]);
}
}
free(dynamicList);
return 0;
}
```
在这个例子中,`createDynamicArray`函数用于创建链表,并为其分配初始内存。`insert`函数插入新的节点,`traverse`函数则遍历整个链表。注意,这个实现仅适用于单向链表,且数组的大小需要预先设定。
阅读全文