帮我写一个C语言版本的单链表,要求不适用动态内存分配
时间: 2023-04-05 22:04:45 浏览: 50
好的,以下是一个简单的C语言版本的单链表,不使用动态内存分配:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct Node {
int data;
struct Node *next;
} Node;
Node nodes[MAX_SIZE];
int count = 0;
void init() {
for (int i = 0; i < MAX_SIZE; i++) {
nodes[i].data = 0;
nodes[i].next = NULL;
}
}
void add(int data) {
if (count >= MAX_SIZE) {
printf("链表已满,无法添加新节点\n");
return;
}
nodes[count].data = data;
count++;
}
void insert(int index, int data) {
if (count >= MAX_SIZE) {
printf("链表已满,无法添加新节点\n");
return;
}
if (index < 0 || index >= count) {
printf("插入位置不合法\n");
return;
}
for (int i = count - 1; i >= index; i--) {
nodes[i + 1] = nodes[i];
}
nodes[index].data = data;
count++;
}
void remove_node(int index) {
if (index < 0 || index >= count) {
printf("删除位置不合法\n");
return;
}
for (int i = index; i < count - 1; i++) {
nodes[i] = nodes[i + 1];
}
count--;
}
void print_list() {
for (int i = 0; i < count; i++) {
printf("%d ", nodes[i].data);
}
printf("\n");
}
int main() {
init();
add(1);
add(2);
add(3);
insert(1, 4);
remove_node(2);
print_list();
return 0;
}
```
这个单链表使用一个静态数组来存储节点,最多可以存储100个节点。在初始化时,将所有节点的数据和指针都设置为NULL。添加节点时,将数据存储在下一个空闲的节点中。插入节点时,将插入位置后面的节点都向后移动一个位置,然后将新节点插入到指定位置。删除节点时,将删除位置后面的节点都向前移动一个位置。打印链表时,遍历所有节点并打印它们的数据。