前言
之前,小玄已经写过了链表相关的文章:
【数据结构与算法】—— * 链表 入门(一)*_forever_bryant的博客-CSDN博客
【数据结构与算法】—— * 链表 入门(二)*_forever_bryant的博客-CSDN博客
在这篇文章,小玄将通过实例讲解的方式来为大家进一步温习相关的内容和知识点。
基本概念
- 结点包括数据域和指针域
- 链表是由 n 个结点链接成,第一个结点的存储位置叫头指针,最后一个结点的指针为“空”
typedef struct Hero{ int id; //英雄编号 char* name; //英雄名称 //指向下一结点的指针 struct Hero* pNext; }Hero;
int main() { Hero hero1 = { 1, "孙尚香" }; Hero hero2 = { 2, "武则天" }; Hero hero3 = { 2, "狂铁" }; Hero hero4 = { 2, "夏侯惇" }; Hero hero5 = { 2, "宫本武藏" }; //Hero1 就是头指针 hero1.pNext = &hero2; hero2.pNext = &hero3; hero3.pNext = &hero4; hero4.pNext = &hero5; hero5.pNext = NULL; return 0; }
链表 实例图解
下图是对上述数据基础的数据结构图:
如果我们想删除3号元素和4号元素的话,只需将对应的结点进行删除,将对应的指针指向第五个元素,然后释放相关的内存空间即可。
链表的头指针和头点
基本概念
* 头指针 : 链表中第一个结点的储存位置
* 头结点 : 在单链表中的第一个结点前附设的一个结点
异同点
头指针 头结点 若链表没有头结点,则是指向头指针的指针;若没有则是链表指向第一个头结点的指针; 头结点是为了操作的统一和方便而设立的,放在第一个结点之前
其数据域一般毫无意义(可以存储链表的长度)
头指针具有表示作用,所以常常用头指针表示链表的名字 有了头结点,在第一个结点前插入和删除第一个结点时,操作与其他结点的操作就统一了。 无论链表是否为空,头指针均不为空。
头指针是链表的必要元素。
头结点不一定是链表的必要元素。
如果觉得有什么意见或者是需要的话,欢迎在评论区向小玄提出哦!
冲冲冲!!