用C语言写出静态链表的定义、初始化、插入和删除
时间: 2024-09-13 18:07:28 浏览: 90
在C语言中,我们可以使用结构体和指向该结构体的指针来创建静态链表。这里是一个简单的例子:
**静态链表定义:**
```c
typedef struct Node {
int data; // 存储数据的域
struct Node* next; // 指向下一个节点的指针
} StaticListNode;
```
这里的`StaticListNode`代表链表节点,`data`用于存储整数数据,`next`是一个指向同类型的指针,表示指向下一个节点。
**初始化:**
由于这是静态链表,我们不需要动态分配内存,可以在函数内部直接初始化一个新的节点。例如:
```c
void createNode(StaticListNode* list, int value) {
static StaticListNode node = {0}; // 初始化一个空节点
node.data = value;
node.next = NULL; // 初始时节点的next指针为NULL
if (list == NULL) {
list = &node; // 如果链表为空,将头节点设置为当前节点
} else {
StaticListNode* current = list;
while (current->next != NULL) {
current = current->next;
}
current->next = &node; // 否则追加到链表尾部
}
}
```
**插入操作:**
```c
void insertNode(StaticListNode* list, int value, int position) {
StaticListNode newNode = {value};
StaticListNode* current = list;
if (position <= 0) {
createNode(&newNode, value);
} else {
for (int i = 1; i < position && current != NULL; i++) {
current = current->next;
}
if (current != NULL) {
newNode.next = current->next;
current->next = &newNode;
}
}
}
```
**删除操作:**
由于静态链表的特点,删除某个位置的元素较为复杂,因为无法改变原有节点的内存地址。如果你想要实现这样的功能,需要有额外的逻辑来处理。这里仅提供添加删除首节点的基本示例:
```c
// 删除首节点(如果有)
void deleteFirstNode(StaticListNode** head) {
if (*head != NULL) {
StaticListNode temp = **head;
*head = (*head)->next;
free(temp); // 注意释放内存
}
}
```
阅读全文