链表-有头链表
一、 什么是链表
链表是一种数据结构,数据结构也就是存取数据的一种方式。它是指相互之间存在一种或多种特定关系的数据元素的集合。而链表是由多个一样特点基本单位组成(我们用结构体来表示这个基本单位)的,而每一个单位只负责下一个数据的位置,要知道它是怎么连接的那就要知道,在基本单位结构体中的分为两种数据分别是:数据域和指针域,它是由每个基本单位结构体的指针域指向下一个位置的地址,从而将它们连接起来。链表在内存空间中数据存储的位置的特点是分布离散的、随机的。它们像串珠子一样一个接一个的线性结构。
头指针与头结点
头指针:头指针是指向链表第一个结点的的指针,如果有头结点那么头指针就是头结点的指针。
头结点:头结点是为了操作统一和方便而设立的,即放在第一个元素的结点之前,数据域一般没有意义(也可以放链表长度)
链表的分成
有头链表、无头链表、双向链表、双向循环链表。
二、有头链表
我们今天来说说有头链表,顾名思义有头链表一定有一个领头羊(头结点)去引导下面的数据。但是要注意的是有头链表它的头节点是不放数据的。
有头链表的思路
1.每个链表都是由多个一样的单元构成所以要先用结构体创建一个最小的特征单位。
#include <stdio.h>
#include <stdlib.h>
//最小的单位
struct Node
{
int data;//数据域
struct Node* next;//指针域
};
2.有头链表要有一个头部去引导下一个数据所以第二步要创建一个头出来
//创建表头(链表)
struct Node* createHead()
{
struct Node* Nodehead = (struct Node*)malloc(sizeof(struct Node));//用malloc在堆区开辟一个空间
Nodehead->next = NULL;//创建的表头没有数据跟着所以要NULL
return Nodehead;
}
3.有了头之后,我们要创建结点,因为每个链表都是由许多的节点构成的,所以要创建节点
//创建结点
struct Node* createNode(int data)
{
struct Node* Noded = (struct Node*)malloc(sizeof(struct Node));
Noded->data = data;
Noded->next = NULL;
return Noded;
}
5.创建好链表之后,我们必然要对其进行数据的扩增和无用数据的删除(在数据的添加和删除时都要记得保存下一个结点防止数据丢失)。数据的添加有以下三种方式:
- 表头插入
//头结点插入
void