线性表的链式存储(双向循环链表)

文章目录

  • 前言
  • 一、双向循环链表是什么?
  • 二、双向循环链表的意义
  • 三、双向循环链表的操作实现
  • 总结


前言

  T_T此专栏用于记录数据结构及算法的(痛苦)学习历程,便于日后复习(这种事情不要啊)。所用教材为《数据结构 C语言版 第2版》严蔚敏。
  有关线性表的顺序存储见线性表概念及顺序表的实现;
  有关单链表见线性表的链式存储(单链表);
  有关单循环链表见线性表的链式存储(单循环链表);
  有关双向链表见线性表的链式存储(双向链表)。


一、双向循环链表是什么?

  首先对双向链表和循环链表进行解释。
  双向链表:在链表的结点中有两个指针域,一个指向直接后继,另一个指向直接前驱。如下图所示(图源亿速云)。对于头结点,无直接前驱结点,故prev为NULL;对于最后一个结点,无直接后继结点,故next为NULL。

  循环链表(CircularLinked List)是除单链表之外另一种形式的链式存储结构。其特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。(贪吃蛇尾巴咬了头)循环链表从表中任一结点出发均可找到表中其他结点,下图所示为单链的循环链表。类似地,还可以有多重链的循环链表。
在这里插入图片描述
  由此可知,双向循环链表就是双向链表成环(天才!)。
在这里插入图片描述

二、双向循环链表的意义

  双向链表便于求某个已知结点的直接前驱,循环链表(尾指针形式)便于求最后一个结点。双向循环链表可以看作两者优势的综合。

链表类型查找表头结点(首元结点)查找表尾结点查找结点*p的前驱结点
带头结点的单链表LL->next,时间复杂度O(1)从L->next依次向后遍历时间复杂度为O(n)通过*p无法找到其前驱
仅设头指针L的循环单链表L->next,时间复杂度O(1)从L->next依次向后遍历时间复杂度为O(n)通过p->next可以找到其前驱,时间复杂度为O(n)
仅设尾指针R的循环单链表R->next,时间复杂度O(1)R,时间复杂度O(1)通过p->next可以找到其前驱,时间复杂度为O(n)
带头结点的双向循环链表LL->next,时间复杂度O(1)L->prior,时间复杂度为O(1)p->prior时间复杂度为O(1)

三、双向循环链表的操作实现

  由前面分析可知,双向循环链表的操作应该是双向链表操作和循环链表操作的有机结合。
  有关单循环链表操作见线性表的链式存储(单循环链表);
  有关双向链表操作见线性表的链式存储(双向链表)。
  下面给出双向循环链表的操作实现:

不是哥们,单循环链表操作和双向链表操作都给你了,还不自己动手写写?

总结

  路漫漫其修远兮,吾将上下而摆烂。
  有任何疑问和补充,欢迎交流。(但我显然不会)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/636489.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3568 android11 修改关机弹窗界面

需要修改关机弹窗界面&#xff0c;当前界面我已经按照客户需求去掉emergency 但是客户需要按其他区域可以实现返回&#xff0c;也就是点击黑色背景取消dialog 嗑代码发现黑色布局为&#xff1a; <node index"0" text"" resource-id"com.android.…

【Python系列】python 如何打印带时间的日志

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

累加(C语言)

一、题目&#xff1b; 二、N-S流程图&#xff1b; 三、运行结果&#xff1b; 四、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;int n 5;int result 0;int sum 0;//运算&#…

[Meachines][Easy]Crafty

Main $ sudo nmap -p- -sS -T4 10.10.11.249 发现25565端口是我的世界服务器端口 CVE-2021-44228: https://nodecraft.com/blog/service-updates/minecraft-java-edition-security-vulnerability在阿帕奇Log4j图书馆&#xff0c;广泛使用的记录框架&#xff0c;在Java应用程序…

《MATLAB科研绘图与学术图表绘制从入门到精通》示例:绘制伊甸火山3D网格曲面图

11.4.2小节我们使用3D曲面图可视化分析伊甸火山数据&#xff0c;本小节我们采用3D网格曲面图可视化分析伊甸火山数据&#xff0c;以展示其地形&#xff0c;具体示例代码如下。 购书地址&#xff1a;https://item.jd.com/14102657.html

局域网无法连接怎么办?

局域网连接是我们日常生活和工作中常用的方式之一&#xff0c;但有时我们可能会遇到局域网无法连接的问题。这给我们的工作和生活带来了很大的困扰。本文将介绍局域网无法连接的常见原因&#xff0c;并推荐一款名为【天联】的组网产品&#xff0c;它能够解决不同地区间的局域网…

js 函数节流和函数防抖及区别详解

文章目录 1. 前言2. 函数节流3. 函数防抖4. 总结 1. 前言 浏览器中总是有一些操作非常耗费性能。所以就有了函数节流和函数防抖来提高浏览器性能。 函数节流&#xff1a;频繁触发一个事件时候&#xff0c;每隔一段时间&#xff0c;函数只会执行一次。 函数防抖&#xff1a;当触…

【webrtc】m98 RoundRobinPacketQueue的优先级处理

m98 代码 PacedSender::EnqueuePackets 的调用者可能是多个地方,所以这个要加锁保护。RoundRobinPacketQueue 本身是没有锁的发现m98和新版本不同,参考:【webrtc】m114自己实现的PrioritizedPacketQueuepush和pop都是RtpPacketToSend 但是实际上,内部是封装为QueuedPacket 处…

JQuery快速入门

目录 一、引入依赖 二、JQuery语法 三、JQuery选择器 四、JQuery事件 五、操作元素 1、获取 / 设置元素内容 1&#xff09;获取元素 2&#xff09;设置元素内容 2、获取 / 设置元素属性 1&#xff09;获取元素属性 2&#xff09;设置元素属性 3、获取 / 返回css属性…

JavaScript之分时函数、分时间段渲染页面、提高用户体验、参数归一化、高阶函数、分段、appendChild、requestIdleCallback

MENU 前言效果图html原始写法优化方式一(参数归一化)优化方式二(当浏览器不支持requestIdleCallback方法的时候)优化方式三(判断环境) 前言 当前需要向页面插入十万个div元素&#xff0c;如果使用普通的渲染方式&#xff0c;会造成延迟。这时候就需要通过分时函数来实现渲染了。…

(C语言)fscanf与fprintf函数详解

目录 1 fprintf详解 1.1 向文件流中输入数据 1.2 向标准输入流写数据 2. fscanf函数详解 2.1 从文件中读取格式化数据 2.2 从标准输入流中读取格式化数据 1 fprintf详解 头文件&#xff1a;stdio.h 该函数和printf的参数特别像&#xff0c;只是多了一个参数stream&#…

互联网技术知识点总览——计算机网络知识框架

简介 本文对计算机网络的知识点整体框架进行梳理和分享如下&#xff1a;