C语言动态链表的创建
一、什么是动态链表
动态链表是一种利用保存在内存中的一组固定长度的节点的数据结构,它比顺序链表更加灵活,可以根据用户的需求动态地增加或者删除链表中的节点。它有一个不变的头指针,指向表的第一个节点。
二、动态链表的创建
1、定义节点结构
定义节点结构即定义以一定顺序存放数据元素以及指向下一个节点的指针。
例如:
struct node
{
int data;
struct node *next;
};
其中data保存了当前节点中的数据,next指向下一个节点,或者如果当前没有下一个节点,则注明指向NULL。
2、创建一个空链表
第一步是创建一个空的链表,也就是把头指针指向NULL,表示当前链表中没有节点。
例如:struct node *head = NULL;
3、创建新节点
当新增一个节点时,可以创建一个新的节点,并使用malloc函数为其分配内存。
例如:struct node *new_node = (struct node *)malloc(sizeof(struct node));
4、插入新的节点
将新的节点插入到当前链表中,可以使用两种方法,一是在表头插入节点,即将新节点作为头节点,指向原来的头节点,再将头指针指向新节点;二是在表尾插入节点,即将尾节点的指针指向新节点,并把新节点的指针指向NULL。
例如:
1.在表头插入节点
struct node *new_node = (struct node *)malloc(sizeof(struct node));
new_node->data = data;
new_node->next = head;
head = new_node;
2.在表尾插入节点
struct node *new_node = (struct node *)malloc(sizeof(struct node));
struct node *p = head;
while(p->next != NULL)
{
p = p->next;
}
p->next = new_node;
new_node->data = data;
new_node->next = NULL;
三、动态链表的删除
由于动态链表中每个节点都是一个独立的内存单元,只要先找到该节点,就可以使用malloc函数释放该节点所占用的内存空间。假如要删除表中某个节点,则可以将该节点的上一个节点的指针指向该节点的下一个指针,再将该节点的指针指向NULL,然后释放该节点占用的内存空间。
四、总结
C语言动态链表的创建包括定义节点结构,创建一个空链表,创建新节点以及插入新节点,并介绍了表头插入和表尾插入两种方式。动态链表的删除是把节点的上一个节点的指针指向节点的下一个指针,并将节点的指针指向NULL,最后再释放该节点占用的内存空间。