青岛大学_王卓老师【数据结构与算法】Week04_03_双向链表_学习笔记

本文是基于青岛大学王卓老师教学视频的个人学习笔记,介绍了双向链表的概念和结构,包括单循环和双循环双向链表。文章强调了双向链表在查找、插入和删除操作中的特点,以及其时间复杂度为O(n)。同时提供了课程视频链接供进一步学习。

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

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。

一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。

如有侵权,请留言作删文处理。

课程视频链接:

数据结构与算法基础–第04周03–2.5.4双向链表1

📚 📌 📝 🔍 ⚠️ 😊 ⭐ 🔗 👋 ❓ 💬 🔹 🔸 🔖 ❗️ 💟 ➔

📚 【Week04】03_双向链表

❓ 为什么要讨论双向链表

在这里插入图片描述

双向链表

在这里插入图片描述

双向链表的结构可定义如下
typedef struct DoubleNode{
    Elemtype data;
    struct DoubleNode *prior, *next;
}DoubleNode, *DoubleLinkList;
单循环双向链表的结构示意图如下

在这里插入图片描述

双循环双向链表的结构示意图如下

在这里插入图片描述

和单链的循环表类似,双向链表也可以有循环表

(1) 让头结点的前驱指针指向链表的最后一个结点。

(2) 让最后一个结点的后继指针指向头结点。

双向循环链表结构的对称性(设指针 p 指向某一结点)
p->prior->next = p = p->next->prior;

结点 b 的前驱结点的后继结点是它本身,结点 b 的后继结点的前驱结点是它本身。

所以,在双向循环链表中,查找某一结点可以通过该节结点的前驱结点或该结点的后驱结点找到。

在这里插入图片描述

在双向链表中,有些操作(如:ListLength、GetElem 等),因仅涉及一个方向的指针,

故它们的算法与线性链表的相同。

但在插入、删除时,则需同时修改两个方向上的指针,两者的操作的时间复杂度均为O(n)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值