一、概念:
链表:链表是一种物理存储结构上非连续、非顺序的存储结构,但链表在逻辑上是连续的,顺序的,而数据元素的逻辑顺序是通过链表中的指针连接次序实现的。
二、单链表操作
1.增加
(1)头插法
(2)尾插法
2.删除
只需要找到对应节点,将对应接点的前一个节点指向这个节点的后继,只需要操作一个指针(带有头节点的链表更好实现以上操作)。
三、代码实现(图文解析)
1.定义一个链表并初始此链表
/*定义一个链表*/
typedef struct Node {
int data; //数据域
struct Node* next; //指针域
}Node;
/*初始化链表*/
Node* InitList(){
Node* list = (Node*)malloc(sizeof(Node));
list->data = 0;
list->next = NULL;
return list;
}
2.头插法建立单链表
/*单链表头插法*/
void HeaderInsert(Node* list,int data){
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = list->next;
list->next = node;
list->data++;
}
3.尾插法建立单链表
/*单链表尾插法*/
void TailInsert(Node* list, int data) {
Node* Header = list;
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
list = list->next;
while (list->next) {
list = list->next;
}
list->next = node;
Header->data++;
}
4.单链表删除指定data
/*单链表删除指定data*/
void Delete(Node* list, int data) {
Node* PreNode = list;
Node* node = list->next;
while (node) {
if (node->data == data) {
PreNode->next = node->next;
free(node);
list->data--;
}
PreNode = node;
node = node->next;
}
}