C语言中如何实现链表?
时间: 2024-06-13 15:06:08 浏览: 111
C语言中可以通过结构体和指针来实现链表。链表是一种动态数据结构,它可以在运行时动态地分配内存空间,不像数组那样需要在编译时就确定大小。链表由节点组成,每个节点包含数据和指向下一个节点的指针。链表有单向链表、双向链表和循环链表等多种形式。
以下是C语言实现单向链表的代码示例:
```c
struct LinkNode {
int data;
struct LinkNode *next;
};
typedef struct LinkNode *Lnode;
// 创建链表
Lnode createList() {
Lnode head = (Lnode)malloc(sizeof(struct LinkNode)); head->next = NULL;
return head;
}
// 在链表尾部插入节点
void insertNode(Lnode head, int data) {
Lnode newNode = (Lnode)malloc(sizeof(struct LinkNode));
newNode->data = data;
newNode->next = NULL;
Lnode p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
// 删除链表中指定节点
void deleteNode(Lnode head, int data) {
Lnode p = head->next;
Lnode pre = head;
while (p != NULL) {
if (p->data == data) {
pre->next = p->next;
free(p);
return;
}
pre = p;
p = p->next;
}
}
// 遍历链表并输出节点数据
void traverseList(Lnode head) {
Lnode p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 释放链表内存
void freeList(Lnode head) {
Lnode p = head;
while (p != NULL) {
Lnode q = p->next;
free(p);
p = q;
}
}
int main() {
Lnode head = createList();
insertNode(head, 1);
insertNode(head, 2);
insertNode(head, 3);
traverseList(head);
deleteNode(head, 2);
traverseList(head);
freeList(head);
return 0;
}
```
以上代码实现了单向链表的创建、节点插入、节点删除、遍历和内存释放等基本操作。
阅读全文