建立动态链表

简介: 建立动态链表

建立动态链表

动态链表是一种在计算机科学中常用的数据结构,与静态链表不同,动态链表在运行时根据需要动态地分配和释放存储空间。这种灵活性使得动态链表在需要频繁添加或删除元素的场景中特别有用。

动态链表通常由一系列的节点组成,每个节点包含两部分:数据域和指针域。数据域用于存储元素的值,而指针域则用于指向链表中的下一个节点。链表的第一个节点通常被称为头节点,它可能不包含实际的数据,而是用于指向链表的第一个实际数据节点。链表的最后一个节点通常包含一个指向NULL的指针,以表示链表的结束。

下面是一个使用C语言建立动态链表的简单示例:

c复制代码

 

#include <stdio.h> 

 

#include <stdlib.h> 

 

 

 

// 定义链表节点的结构体

 

typedef struct Node {

 

int data;

 

struct Node* next;

 

} Node;

 

 

 

// 创建新节点

 

Node* createNode(int data) {

 

Node* newNode = (Node*)malloc(sizeof(Node));

 

if (!newNode) {

 

printf("内存分配失败!\n");

 

exit(1);

 

}

 

newNode->data = data;

 

newNode->next = NULL;

 

return newNode;

 

}

 

 

 

// 在链表尾部添加节点

 

void appendNode(Node** head, int data) {

 

Node* newNode = createNode(data);

 

if (!*head) {

 

*head = newNode;

 

return;

 

}

 

Node* temp = *head;

 

while (temp->next) {

 

temp = temp->next;

 

}

 

temp->next = newNode;

 

}

 

 

 

// 打印链表

 

void printList(Node* head) {

 

Node* temp = head;

 

while (temp) {

 

printf("%d ", temp->data);

 

temp = temp->next;

 

}

 

printf("\n");

 

}

 

 

 

// 释放链表内存

 

void freeList(Node* head) {

 

Node* temp;

 

while (head) {

 

temp = head;

 

head = head->next;

 

free(temp);

 

}

 

}

 

 

 

int main() {

 

Node* head = NULL; // 初始化链表头指针为NULL

 

 

 

// 向链表中添加节点

 

appendNode(&head, 1);

 

appendNode(&head, 2);

 

appendNode(&head, 3);

 

appendNode(&head, 4);

 

appendNode(&head, 5);

 

 

 

// 输出链表内容

 

printf("链表内容为:");

 

printList(head);

 

 

 

// 释放链表内存

 

freeList(head);

 

 

 

return 0;

 

}

在上面的代码中,我们首先定义了一个链表节点的结构体Node,它包含一个整数类型的数据域data和一个指向下一个节点的指针域next。然后,我们创建了一个createNode函数来创建新的链表节点,并为其分配内存。appendNode函数用于在链表的尾部添加新的节点。

printList函数用于遍历链表并打印出每个节点的数据。freeList函数用于释放整个链表所占用的内存。在main函数中,我们初始化了一个空的链表,并向其中添加了几个节点。然后,我们打印出链表的内容,并在最后释放了链表所占用的内存。

请注意,在使用动态链表时,我们必须确保在不再需要链表时释放其占用的内存,以避免内存泄漏。在上面的示例中,我们在main函数的最后调用了freeList函数来释放链表内存。在实际应用中,你可能还需要考虑错误处理和异常情况,以确保程序的健壮性。

 

目录
相关文章
|
2月前
|
存储 C语言
建立简单的静态链表
建立简单的静态链表
12 1
|
2月前
|
Java
如何建立链表,链表的建立过程
如何建立链表,链表的建立过程
|
5月前
|
存储
数据结构实验之链表一:顺序建立链表
数据结构实验之链表一:顺序建立链表
|
17天前
尾插法建立链表
尾插法建立链表
5 0
尾插法建立链表
|
2月前
|
存储 C语言
建立动态链表
建立动态链表
13 1
|
10月前
|
存储
动态链表的创建
动态链表的创建
|
7月前
|
C++
C/C++之链表的建立
C/C++之链表的建立
44 0
|
9月前
6-10 建立学生信息链表(20分)
本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。
68 0
|
10月前
|
Java
java数据结构21:按大小顺序建立单链表并按要求删除节点
输入的每一行是姓名和年龄。读入每个人的信息,按年龄从小到大建立一个单链表。 按示例格式输出这个单链表。 删除链表中所有年龄是偶数的节 点,按示例格式输出剩下的所有节点。 要求:必须删除节点,不能只是跳过节点不输出。
46 0
|
存储 算法
数据结构之单链表一生的历程(创建一个线性表,动态分布空间,单链表创建的思路,单链表的增、删、改、毁)
数据结构之单链表一生的历程(创建一个线性表,动态分布空间,单链表创建的思路,单链表的增、删、改、毁)