【408数据结构与算法】—单链表(五)
一、什么是单链表
- 单链表:每个结点只有一个指针域
- 双链表:每个结点有两个指针域
- 循环链表:链表结点首尾相接
二、带头结点的单链表
单链表是由表头唯一确定的,因此单链表可以用头指针的名字来命名若头指针名是L,则链表称为表L
🎊单链表的存储结构
定义链表L:LinkList;
定义结点指针p:LNode *p<=>LinkList p;
例如:存储学生学号,姓名,成绩的单链表结点类型定义如下:
typedef Struct student{ char num[8]; char name[8]; int score; struct student *next; }Lnode,*LinkList;
为了统一链表的操作,通常这样定义:
typedef Struct student{ char num[8]; char name[8]; int score; }ElemType; typedef struct Lnode{ ElemType data; struct Lnode *next; struct Lnode *next; }Lnode,*LinkList
三、单链表的基本操作
1️⃣单链表的初始化
算法的步骤:
- 生成新结点作为头结点,用头指针L指向头结点
- 将头结点的指针域置空
补充算法1:判断链表是否为空
空表:链表中无元素,称为空链表(头指针和头结点仍然存在)
补充算法2:单链表的销毁:链表销毁后不存在
算法思路:从头指针开始,依次释放所有结点
销毁单链表的算法
补充算法3:单链表的清空:链表仍然存在,但链表中无元素,称为空链表(头指针和头结点仍然存在)
算法思路:依次释放所有的结点,并将头结点指针域设置为空
补充算法4:求单链表的表长
算法思路:从首元结点开始,依次计数所有结点