链表

本文详细介绍了链表这一数据结构,包括单链表、双向链表和循环链表的基本概念、特点及操作。单链表由Next指针连接,双向链表增加Prev指针,支持双向遍历。循环链表则通过将链尾的Next指针指向链头形成闭环,无明确的链头和链尾。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、什么是链表?

链表 [Linked List]:链表是由一组不必相连(不必相连:可以连续也可以不连续)的内存结构(节点),按特定的顺序链接在一起的抽象数据类型。
补充:
抽象数据类型(Abstract Data Type [ADT]):表示数学中抽象出来的一些操作的集合。
内存结构:内存中的结构,如:struct、特殊内存块…等等之类;

数组和链表的区别和优缺点:
数组是一种连续存储线性结构,元素类型相同,大小相等
数组的优点:
存取速度快
数组的缺点:
事先必须知道数组的长度
插入删除元素很慢
空间通常是有限制的
需要大块连续的内存块
插入删除元素的效率很低

链表是离散存储线性结构
n 个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,每个节点只有一
个后续节点,首节点没有前驱节点,尾节点没有后续节点。

链表优点:
空间没有限制
插入删除元素很快
链表缺点:
存取速度很慢

二、链表共分几类?

链表常用的有 3 类: 单链表、双向链表、循环链表。
在这里插入图片描述
链表的核心操作集有 3 种:插入、删除、查找(遍历)

单链表
单链表 [Linked List]:由各个内存结构通过一个 Next 指针链接在一起组成,每一个内
存结构都存在后继内存结构(链尾除外),内存结构由数据域和 Next 指针域组成。

单链表实现图示:
在这里插入图片描述

解析:
Data 数据 + Next 指针,组成一个单链表的内存结构 ;
第一个内存结构称为 链头,最后一个内存结构称为 链尾;
链尾的 Next 指针设置为 NULL [指向空];
单链表的遍历方向单一(只能从链头一直遍历到链尾)
单链表操作集:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

双向链表
双向链表 [Double Linked List]:由各个内存结构通过指针 Next 和指针 Prev 链接在一
起组成,每一个内存结构都存在前驱内存结构和后继内存结构(链头没有前驱,链尾没有后
继),内存结构由数据域、Prev 指针域和 Next 指针域组成。

双向链表实现图示:
在这里插入图片描述

解析:
Data 数据 + Next 指针 + Prev 指针,组成一个双向链表的内存结构;
第一个内存结构称为 链头,最后一个内存结构称为 链尾;
链头的 Prev 指针设置为 NULL, 链尾的 Next 指针设置为 NULL;
Prev 指向的内存结构称为 前驱, Next 指向的内存结构称为 后继;
双向链表的遍历是双向的,即如果把从链头的 Next 一直到链尾的[NULL] 遍历方向定
义为正向,那么从链尾的 Prev 一直到链头 [NULL ]遍历方向就是反向;

双向链表操作集:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

循环链表
单向循环链表 [Circular Linked List] : 由各个内存结构通过一个指针 Next 链接在一起
组成,每一个内存结构都存在后继内存结构,内存结构由数据域和 Next 指针域组成。
双向循环链表 [Double Circular Linked List] : 由各个内存结构通过指针 Next 和指针
Prev 链接在一起组成,每一个内存结构都存在前驱内存结构和后继内存结构,内存结构由
数据域、Prev 指针域和 Next 指针域组成。
循环链表的单向与双向实现图示:
在这里插入图片描述

解析:
循环链表分为单向、双向两种;
单向的实现就是在单链表的基础上,把链尾的 Next 指针直接指向链头,形成一个闭环;
双向的实现就是在双向链表的基础上,把链尾的 Next 指针指向链头,再把链头的 Prev
指针指向链尾,形成一个闭环;
循环链表没有链头和链尾的说法,因为是闭环的,所以每一个内存结构都可以充当链头
和链尾;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值