简单链表是一种常见的数据结构,用于存储一系列元素,并通过指针将它们连接起来。在C语言中,我们可以通过动态内存分配函数malloc来创建链表节点,但是本题要求实现一个没有malloc的简单链表。
在没有malloc的情况下,我们可以使用静态数组来模拟链表节点的存储。下面是一个用C语言实现的没有malloc的简单链表的示例代码:
#include <stdio.h>
#define MAX_SIZE 100
typedef struct Node {
int data;
int next;
} Node;
Node list[MAX_SIZE];
int head = -1; // 头节点的索引
// 初始化链表
void initList() {
for (int i = 0; i < MAX_SIZE; i++) {
list[i].next = -1;
}
}
// 在链表末尾插入节点
void insert(int data) {
int newNodeIndex = -1;
for (int i = 0; i < MAX_SIZE; i++) {
if (list[i].next == -1) {
newNodeIndex = i;
break;
}
}
if (newNodeIndex == -1) {
printf("链表已满,无法插入新节点\n");
return;
}
list[newNodeIndex].data = data;
list[newNodeIndex].next = -1;
if (head == -1) {
head = newNodeIndex;
} else {
int curIndex = head;
while (list[curIndex].next != -1) {
curIndex = list[curIndex].next;
}
list[curIndex].next = newNodeIndex;
}
}
// 打印链表
void printList() {
int curIndex = head;
while (curIndex != -1) {
printf("%d ", list[curIndex].data);
curIndex = list[curIndex].next;
}
printf("\n");
}
int main() {
initList();
insert(1);
insert(2);
insert(3);
printList();
return 0;
}
在上述代码中,我们使用了一个静态数组list
来存储链表节点,每个节点包含一个data
字段用于存储数据,一个next
字段用于指向下一个节点的索引。通过维护一个head
变量来记录链表的头节点索引。
在insert
函数中,我们首先找到一个空闲的数组元素作为新节点的索引,然后将数据存入新节点,并将新节点插入到链表的末尾。
最后,通过printList
函数可以打印出链表中的所有元素。
这是一个简单的没有使用malloc的链表实现,适用于存储较小规模的数据。如果需要存储大量数据或者动态增删节点,建议使用动态内存分配函数malloc来实现链表。
领取专属 10元无门槛券
手把手带您无忧上云