双链表(上)

news2024/11/18 7:51:49

1.结构

1.带头双向循环链表

注意:这里的“带头”跟前面我们说的“头节点”是两个概念,实际前面的在单链表阶段称呼不严
谨,但是为了同学们更好的理解就直接称为单链表的头节点。
带头链表里的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这里“放哨
的”。


“哨兵位”存在的意义:遍历循环链表避免死循环。在这里需要知道的我们在学习单链表的时候学的是没有带头的,只是将第一个节点作为头结点而已,带头的是表示一个不保存数据节点作为第一个节点。

2.双链表的实现

在这里应该有些小伙伴猜到了,我们在在之前学习的顺序表,单链表都是结构体声明,当然双链表也是的。

我们来看看是怎么实现的吧?

typedef int LTDataType;
typedef struct ListNode
{
struct ListNode* next; //指针保存下⼀个节点的地址
struct ListNode* prev; //指针保存前⼀个节点的地址
LTDataType data;
}LTNode;

我们发现双链表的声明比单链表多了一个东西,一个节点即保存下一个节点的地址又保存上一个节点的地址,当然头结点除外。

当然实现双链表也需要实现一些函数,我们先来看看需要实现的函数,下一篇将展示函数的实现。

在这之前大家可以先研究研究,动手试试看。

LTNode* LTInit();
void LTDestroy(LTNode* phead);
void LTPrint(LTNode* phead);
bool LTEmpty(LTNode* phead);
void LTPushBack(LTNode* phead, LTDataType x);
void LTPopBack(LTNode* phead);
void LTPushFront(LTNode* phead, LTDataType x);
void LTPopFront(LTNode* phead);
//在pos位置之后插⼊数据
void LTInsert(LTNode* pos, LTDataType x);
void LTErase(LTNode* pos);
LTNode *LTFind(LTNode* phead,LTDataType x);

3. 顺序表和双向链表的优缺点分析

不同点顺序表链表(单链表)
存储空间上物理上一定连续逻辑上连续,但物理上不一定连续
随机访问支持O(1)不⽀持:O(N)
任意位置插入或者删除元素可能需要搬移元素,效率低O(N)只需修改指针指向
插入动态顺序表,空间不够时需要扩容
 
没有容量的概念
应用场景元素高效存储+频繁访问任意位置插入和删除频繁
谢谢

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Web】浅聊XStream反序列化本源之恶意动态代理注入

目录 简介 原理 复现 具体分析之前 我们反序列化了个什么? XStream反序列化的朴素通识 具体分析 第一步:unmarshal解组 第二步:readClassType获取动态代理类的Class对象 第三步:调用convertAnother对动态代理类进行实例…

使用公式在Excel中指定列值的变化实现自动间隔着色(不是按照固定的行数)

如果你的文件很小,可以手工着色;但如果很大,就要借助公式来着色; 目的是什么,其中之一是:提升可读性。 一起往下看吧!! 如果你想要根据Excel某列中值的变化来间隔着色,…

LaTeX 目录标题取消(自定义)留白间距

默认的目录格式生成如下图,会发现“2 产品介绍”和“1.2 项目概述”中存在一段留白 通过在导言区定义以下代码即可自定义标题留白间距宽度 \usepackage[subfigure]{tocloft} \setlength{\cftbeforesecskip}{0.3em} 最终修改的效果如下

Games101笔记-变换

Scale Reflection Shear Rotate 没有额外提示默认绕原点旋转 线性变换 Transiation 不属于线性变换,仿射变换 齐次坐标 二维的点和向量增加一个维度 点加点等于两个点的中点 所有的仿射变换都可以写成齐次坐标的形式 在表示二维情况下的仿射变换时&#…

五.pandas常见操作

目录 五.pandas常见操作 1.pandas处理字符串 以上演示 1-大小写转换 2-去空格(两边) .str.strip() 3-切割 4-连接 .str.cat() 5-空格检测 .str.contains(" ") 6-替换 7-count()--返回元素出现次数 8-repeat() 2.查询操作 2.1 query(" ") 2.2…

mysql生成连续的日期

1.代码 例如:生成"2023-03-01"至"2023-03-10"之间的日期 WITH RECURSIVE date_range AS (SELECT "2023-03-01" AS date FROM dualUNION ALLSELECT DATE_ADD(date, INTERVAL 1 DAY) dateFROM date_rangeWHERE DATE_ADD(date, INTER…

【机器人控制 Robot Control】非线性控制(Non-linear Control)建模举例【新加坡南洋理工大学 NTU Singapore】

Non-linear Control Method Example: Non-linear Mechanical System Modelling of the System using Control Law Partitioning (Handwritten)

wordpress被恶意搜索攻击(网址/?s=****)解决方法。

源地址:https://www.ctvol.com/seoomethods/1413686.html 什么叫恶意搜索攻击? wordpress恶意搜索攻击并不是像病毒一样的攻击,而是一种seo分支黑帽手段,通过被攻击网站搜索功能中长尾关键词来实现攻击,通过网址不断…

数学问题难解?新研究提出MathScale方法,让AI更懂数学推理

引言:数学问题解决中的语言模型挑战 数学问题解决是一个复杂的认知过程,它要求参与者不仅要掌握数学知识,还要能够进行多步骤的逻辑推理。近年来,大语言模型(LLMs)在解决问题方面展现出了显著的能力&#…

环信ChatroomUIKit功能详解——超详细介绍

聊天室是当下泛娱乐社交应用中最经典的玩法,通过调用环信的 IM SDK 接口,可以快速创建聊天室。如果想根据自己业务需求对聊天室应用的 UI界面、弹幕消息、礼物打赏系统等进行自定义设计,最高效的方式则是使用环信的 ChatroomUIKit 。 文档地址…

2024年【安全生产监管人员】及安全生产监管人员模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 2024年【安全生产监管人员】及安全生产监管人员模拟考试题库,包含安全生产监管人员答案和解析及安全生产监管人员模拟考试题库练习。安全生产模拟考试一点通结合国家安全生产监管人员考试最新大纲及安全生…

面试复盘记录(数据开发)

一、apple外包1.矩阵顺时针旋转遍历2.两表取差集 二、 一、apple外包 没问理论,就两个算法题。 1.矩阵顺时针旋转遍历 Given an m x n matrix, return all elements of the matrix in spiral order.Example 1:Input: matrix [[1,2,3],[4,5,6],[7,8,9]] Output: …

岩土工程渗流问题之有限单元法:理论、模块化编程实现、开源程序应用

有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元解法。尽管各类商业软件使用方便,但其使用对用户来说往往是一个“黑箱子”。相比而言,开源的有限元程序计算方法透明、计算过程可控,…

【NR 定位】3GPP NR Positioning 5G定位标准解读(八)- OTDOA定位

前言 3GPP NR Positioning 5G定位标准:3GPP TS 38.305 V18 3GPP 标准网址:Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读(一)-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读(…

redis在微服务领域的贡献,字节跳动只面试两轮

dubbo.registry.addressredis://127.0.0.1:6379 注册上来的数据是这样,类型是hash /dubbo/ s e r v i c e / {service}/ service/{category} 如 /dubbo/com.newboo.sample.api.DemoService/consumers /dubbo/com.newboo.sample.api.DemoService/providers has…

Apache Paimon系列之:主键表

Apache Paimon系列之:主键表 一、主键表1.Bucket2.LSM Trees3.Compaction 二、数据分布1.固定Bucket2.动态Bucket3.正常动态Bucket模式4.跨分区更新插入动态存储桶模式 三、Merge Engine1.Deduplicate2.部分更新3.序列组4.聚合部分更新5.聚合6.Retract7.First Row 四…

01-java入门了解--cmd命令、jdk、java的认识

cmd常用命令 java入门需要安装的环境 jdk。(下载好jdk,并配置好环境)idea。(或者其他的编程工具) jdk安装目录介绍 第一步:编写程序(程序员写.java后缀的文件) 第二步:…

【LLMs+小羊驼】23.03.Vicuna: 类似GPT4的开源聊天机器人( 90%* ChatGPT Quality)

官方在线demo: https://chat.lmsys.org/ Github项目代码:https://github.com/lm-sys/FastChat 官方博客:Vicuna: An Open-Source Chatbot Impressing GPT-4 with 90% ChatGPT Quality 模型下载: https://huggingface.co/lmsys/vicuna-7b-v1.5 | 所有的模…

Nuxt3 初学,基础配置,页面结构搭建,引入element

1.下载Nuxt框架 Nuxt 中文站 - 直观的Web框架 Nuxt3文档 NuxtNuxt是一个开源框架,它使web开发直观而强大。自信地创建高性能和生产级全栈web应用程序和网站。https://www.nuxt.com.cn/根据官方文档进行配置 2.配置页面 1.主要页面结构 导航栏内容底部 1.在comp…

最适合Oracle数据库的Linux操作系统?

先声明:以下观点仅供参考。我只引用网上的一些观点,包括官网等。 Oracle数据库认证的Linux操作系统 最近老被问到Oracle Linux免费吗?因为用户需要安装Oracle数据库,面临选择操作系统的问题。 首先,Oracle数据库 19…