一. 简介
单链表是一种常见且基础的数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。
本文简单学习一下C语言中如何实现单项链表。
二. C语言实现单向链表
单向链表:单向链表是一种线性数据结构,由一系列节点组成,每个节点包含两部分:
数据域:存储实际的数据。
指针域:存储指向下一个节点的地址。
单向链表关键点在于:每个节点只有一个指向下一个节点的指针,没有指向前一个节点的指针。
1. 定义链表节点,创建新节点
要实现单链表,首先要定义节点的结构,节点通常包含数据和指向下一个节点的指针。
#include <stdio.h>
#include <stdlib.h>//定义链表节点
typedef struct Node {int data;struct Node* next;
} Node;
创建新节点时,需要为其分配内存,并初始化数据和指针:
//创建链表新节点
Node* create_list(int data) {Node* head = (Node*)malloc(sizeof(Node));if(head == NULL) {printf("malloc error!\n");exit(1);}head->data = data;head->next = NULL;return head;
}
2. 插入节点
插入节点的操作,可以在链表头部,或者指定位置,尾部进行插入。下面实现像链表头部,尾部插入节点。
(1) 向链表头插入新节点:
//向链表头部插入新节点
Node* insert_at_list_head(Node* head, int data) {Node* new_node = create_list(data);new_node->next = head;return new_node;
}
(2) 向链表尾部插入新节点:
//向链表尾部插入新节点
Node* insert_at_list_end(Node* head, int data) {Node* new_node = create_list(data);if (head == NULL) {return new_node;}//找到链表尾部Node* st_p = head;while(st_p->next != NULL) {st_p = st_p->next;}st_p->next = new_node;return head;
}
(2) 向链表的指定位置插入新节点:
//在链表的指定位置插入新节点
Node* insert_at_list_middle(Node* head, int data, int position) {int i = 0;Node* new_node = create_list(data);//如果插入的位置是头部if(position == 0) {return insert_at_list_head(head, data);}//遍历到指定位置的前一个节点Node* tmp_p = head;for(i=0; i < position-1 && tmp_p->next != NULL; i++) {tmp_p = tmp_p->next;}//如果插入位置超过链表长度,则不进行插入if(tmp_p->next == NULL) {free(new_node);return head;}//在指定位置插入新节点new_node->next = tmp_p->next;tmp_p->next = new_node;return head;
}
下一篇继续学习C语言中对于链表的操作。例如,在链表中查找某个节点,删除链表中某个节点,遍历链表,释放链表等等操作。