0
点赞
收藏
分享

微信扫一扫

【408数据结构与算法】—单链表(五)


【408数据结构与算法】—单链表(五)

一、什么是单链表

  • 单链表:每个结点只有一个指针域
  • 双链表:每个结点有两个指针域
  • 循环链表:链表结点首尾相接

二、带头结点的单链表

单链表是由表头唯一确定的,因此单链表可以用头指针的名字来命名若头指针名是L,则链表称为表L

【408数据结构与算法】—单链表(五)_数据结构


【408数据结构与算法】—单链表(五)_头结点_02

🎊单链表的存储结构

【408数据结构与算法】—单链表(五)_结点_03

【408数据结构与算法】—单链表(五)_头结点_04


【408数据结构与算法】—单链表(五)_链表_05


定义链表L:​​LinkList;​​​ 定义结点指针p:​​LNode *p<=>LinkList p;​

例如:存储学生学号,姓名,成绩的单链表结点类型定义如下:

typedef Struct student{
char num[8];
char name[8];
int score;
struct student *next;
}Lnode,*LinkList;

【408数据结构与算法】—单链表(五)_头结点_06


为了统一链表的操作,通常这样定义:

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

【408数据结构与算法】—单链表(五)_结点_07

三、单链表的基本操作

1️⃣单链表的初始化

算法的步骤:

  • 生成新结点作为头结点,用头指针L指向头结点
  • 将头结点的指针域置空
  • 【408数据结构与算法】—单链表(五)_头结点_08

补充算法1:判断链表是否为空

空表:链表中无元素,称为空链表(头指针和头结点仍然存在)

【408数据结构与算法】—单链表(五)_数据结构_09

补充算法2:单链表的销毁:链表销毁后不存在

算法思路:从头指针开始,依次释放所有结点

【408数据结构与算法】—单链表(五)_头结点_10


销毁单链表的算法

【408数据结构与算法】—单链表(五)_头结点_11


补充算法3:单链表的清空:链表仍然存在,但链表中无元素,称为空链表(头指针和头结点仍然存在)

算法思路:依次释放所有的结点,并将头结点指针域设置为空

【408数据结构与算法】—单链表(五)_头结点_12


【408数据结构与算法】—单链表(五)_链表_13


补充算法4:求单链表的表长

算法思路:从首元结点开始,依次计数所有结点

【408数据结构与算法】—单链表(五)_头结点_14


【408数据结构与算法】—单链表(五)_结点_15


【408数据结构与算法】—单链表(五)_结点_16


举报

相关推荐

0 条评论