c语言链表使用
时间: 2023-08-10 12:19:41 浏览: 107
链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据以及指向下一个节点的指针。C语言中,可以通过结构体和指针来实现链表。
下面是一个简单的链表示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct Node {
int data;
struct Node* next;
};
// 创建新的节点
struct Node* newNode(int data) {
struct Node* node = (struct Node*)malloc(sizeof(struct Node));
node->data = data;
node->next = NULL;
return node;
}
// 在链表末尾添加节点
void append(struct Node** headRef, int data) {
struct Node* node = newNode(data);
struct Node* current = *headRef;
if (*headRef == NULL) {
*headRef = node;
} else {
while (current->next != NULL) {
current = current->next;
}
current->next = node;
}
}
// 在链表中插入节点
void insert(struct Node** headRef, int data, int index) {
struct Node* node = newNode(data);
struct Node* current = *headRef;
int i;
if (index == 0) {
node->next = *headRef;
*headRef = node;
} else {
for (i = 0; i < index - 1; i++) {
if (current == NULL) {
printf("Index out of bounds.\n");
return;
}
current = current->next;
}
node->next = current->next;
current->next = node;
}
}
// 在链表中删除节点
void removeNode(struct Node** headRef, int index) {
struct Node* current = *headRef;
struct Node* temp;
int i;
if (index == 0) {
*headRef = (*headRef)->next;
free(current);
} else {
for (i = 0; i < index - 1; i++) {
if (current == NULL) {
printf("Index out of bounds.\n");
return;
}
current = current->next;
}
temp = current->next;
current->next = temp->next;
free(temp);
}
}
// 打印链表
void printList(struct Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
struct Node* head = NULL;
append(&head, 1);
append(&head, 2);
append(&head, 3);
insert(&head, 4, 1);
removeNode(&head, 2);
printList(head);
return 0;
}
```
在上述代码中,我们定义了一个`Node`结构体,其中包含一个`data`变量和一个指向下一个节点的指针`next`。`newNode`函数用于创建新节点,`append`函数用于在链表末尾添加节点,`insert`函数用于在指定位置插入节点,`removeNode`函数用于删除指定位置的节点,`printList`函数用于打印链表。在`main`函数中,我们首先创建了一个空链表`head`,然后进行了一系列操作,并最终打印了链表。
链表是一种非常灵活的数据结构,可以用于解决许多问题。在实际应用中,我们可能需要实现更复杂的链表操作,例如反转链表、合并链表等,这需要我们对链表的结构和操作有更深入的理解。
阅读全文