双链表的插入,删除以及遍历

news2024/9/28 12:13:36

在上一节我们讲解了单链表的头插法和尾插法

http://t.csdn.cn/RixAu

但是单链表无法反向检索,对于某些情景可能造成不便,所以我们今天学习双链表

目录

1.双链表的初始化

2.双链表的插入

3.双链表的删除

4.遍历双链表


1.双链表的初始化

typedef int ElemType;
typedef struct DLinkList{
    ElemType data;
    struct DNode *prior,*next;
    
}DNode,*DLinkList;

bool InitDLinkList(DLinkList &L)
{
    L=(DNode*)malloc(sizeof(DNode));
    if(L=NULL)
    {
        return false;
    }
    L->prior=NULL;
    L->next=NULL;
    return true;

}

void testDLinkList()
{
    DLinkList L;
    InitLinkList(L);
    
}

//判断双链表是否为空
bool Empty(DLinkList L)
{
    if(L->next==NULL)
        return true;
    else
        return false;
    
}

2.双链表的插入

//在p结点之后插入s结点
bool InsertNextNode(DNode *p,DNode *s)
{
    if(p==NULL || s==NULL)
        return false;
    s->next=p->next;//将结点*s插入到结点*p之后
    if(p->next!=NULL)
        p->next->prior=s;
    s->prior=p;
    p->next=s;
    return true;
}

3.双链表的删除

bool DeleteNextDNode(DNode *p)
{
    if(p==NULL)
       return false;
    DNode *q=p->next;
    if(q==NULL)
        return false;
    p->next=q->next;
    if(q->next!=NULL)
        q->next->prior=p;
    free(q);
    return true;

}

void DestroyList(DLinkList &L)
{
//释放各数据结点
    while(L->next!=NULL)
        DeleteNextNode(L);
    free(L);//释放头结点
    L=NULL;//头指针指向NULL

}

4.遍历双链表

//后向遍历
while(p!=NULL)
{
    p=p->next;

}

while(p!=NULL)
{
    p=p->prior;

}
//前向遍历,跳过头结点
while(p->prior!=NULL)
{
    p=->prior;
}
时间复杂度O(n)

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

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

相关文章

【Git】(一)基本操作

读完本文后,您会了解: 1、如何在本地配置GIT环境? 2、环境配置成功后,如何从远端下载一个已有仓库到本地? 1. 配置全局用户名、邮箱 git config --global user.name "username" git config --global user.email &q…

plt绘画带箭头的xy坐标轴

import matplotlib.pyplot as plt import mpl_toolkits.axisartist as axisartist# 创建画布 fig plt.figure() # 使用axisartist.Subplot方法创建一个绘图区对象ax ax axisartist.Subplot(fig,2,3,1) # 将绘图区对象添加到画布中 fig.add_axes(ax) # 通过set_axisline_style…

varifocal loss(VFL)介绍

文章目录 一、论文链接二、公式理解代码 一、论文链接 https://arxiv.org/pdf/2008.13367.pdf 二、公式理解 简单说明下,这里的IACS是IoU-aware classification score的缩写。VFL原文里面这个target socre也就是q,是一个和IOU有关的软标签。对于挑选出…

华为网络篇 RIP的报文认证-28

难度2复杂度2 目录 一、实验原理 二、实验拓扑 三、实验步骤 四、实验过程 总结 一、实验原理 RIP的认证方式有两种,一种是明文认证,另一个是密文认证。明文认证有一个比较大的缺陷,就是认证的密钥也是明文传输的,这为攻击者…

关于 LLM 和图数据库、知识图谱的那些事

本文整理自 NebulaGraph 布道师 wey 在「夜谈 LLM」主题分享上的演讲,主要包括以下内容: 背景 LLMRAGGraph 知识抽取Text2CypherGraph RAG未来规划 技术背景 LLM 是什么 这里简单、快速地介绍下大语言模型:从 GPT-2 开始,到后…

如何在安卓设备上安装并使用 ONLYOFFICE 文档

您可以使用文档安卓版应用,在移动设备上访问存在您 ONLYOFFICE 帐号中的文件。阅读本文,了解如何操作。 什么是 ONLYOFFICE 文档安卓版 适用于 Android 系统的 ONLYOFFICE 文档是一款全面的办公工具,您可以使用它,查看、创建、编…

42.SpringBoot—原理篇

一、SpringBoot原理篇。 (1)自动配置。 (1.1)bean加载方式。 (1.1.1)xml方式。(适用自定义bean与第三方bean) (1.1.2)注解方式组件扫描。(适用于自定义bean&#xff…

[PyTorch][chapter 50][自定义网络 ResNet18]

前言: 这里结合一个ResNet-18 网络,讲解一下自己定义一个深度学习网络的完整流程。 经过20轮的训练,测试集上面的精度85% 一 残差块定义 针对图像处理有两种结构,下面代码左右实现的是左边的结构. # -*- coding: utf-8 -*- &q…

基于YOLOv8模型和Caltech数据集的行人检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要 基于YOLOv8模型和Caltech数据集的行人检测系统可用于日常生活中检测与定位行人,利用深度学习算法可实现图片、视频、摄像头等方式的行人目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集…

2022年06月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;小白鼠再排队 N只小白鼠(1 < N < 100)&#xff0c;每只鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量&#xff0c;要求按照白鼠重量从小到大的顺序输出它们头上帽子的颜色。帽子的颜色用 “red”&#xff0c;“blue”等字符串来表示。不同的小白…

实现简单纯Canvas文本输入框,新手适用

文章目录 概要效果技术细节代码 概要 Canvas上面提供输入&#xff1a; 一、最简单可能是用dom渲染一个input,覆盖在图形上面进行文本编辑&#xff0c;编辑完再把内容更新到图形.这样简单&#xff0c;但是缺点也明显&#xff0c;就是它不是真正绘制在canvas上面&#xff0c;没…

爬虫逆向实战(三)--天某云登录

一、数据接口分析 主页地址&#xff1a;天某云 1、抓包 通过抓包可以发现登录接口是account/login 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过“载荷”模块可以发现password、comParam_signature、comParam_seqCode是加密的 请求头是否加密&#xff1f; 无…

嵌入式学习之字符串

通过今天的学习&#xff0c;我主要提高了对sizeof 和 strlen、puts()、gets()、strcmp 、strncmp、strstr、strtok的理解。重点对sizeof的使用有了更加深刻的理解

【会议征稿信息】第二届信息学,网络与计算技术国际学术会议(ICINC2023)

2023年第二届信息学&#xff0c;网络与计算技术国际学术会议(ICINC2023) 2023 2nd International Conference on Informatics,Networking and Computing (ICINC 2023) 2023年第二届信息学&#xff0c;网络与计算技术国际学术会议(ICINC2023)将于2023年10月27-29日于中国武汉召…

MongoDB:数据库初步应用

一.连接MongoDB 1.MongoDBCompass连接数据库 连接路径:mongodb://用户名:密码localhost:27017/ 2.创建数据库(集合) MongoDB中数据库被称为集合. MongoDBCompass连接后,点击红色框加号创建集合,点击蓝色框加号创建文档(数据表) 文档中的数据结构(相当于表中的列)设计不用管…

mqtt学习记录

目录 1 匿名登录2 ⽤户名密码登录&#xff0c;配置接收的主题mosquitto 配置文件修改添加⽤户信息添加topic和⽤户的关系登录演示 1 匿名登录 ⾸先打开三个终端&#xff0c; 启动代理服务&#xff1a;mosquitto -v -v 详细模式 打印调试信息 默认占⽤&#xff1a;1883端⼝订阅…

机器学习笔记:线性链条件随机场(CRF)

0 引入&#xff1a;以词性标注为例 比如我们要对如下句子进行标注&#xff1a; “小明一把把把把住了”那么我么可能有很多种词性标注的方法&#xff0c;中间四个“把”&#xff0c;可以是“名词名词动词名词”&#xff0c;可以是“名词动词动词名词”等多种形式。 那么&#…

安装chromedriver 115,对应chrome版本115(经检验,116也可以使用)

目录 1. 查看Chrome浏览器的版本2. 找到对应的chromedriver3. 安装ChromeDriver 1. 查看Chrome浏览器的版本 点进这个网站查看&#xff1a;chrome://settings/help &#xff08;真是的&#xff0c;上一秒还是115版本&#xff0c;更新后就是116版本了&#xff0c;好在chromedi…

Python程序设计——列表

一、引言 关键点&#xff1a;一个列表可以存储任意大小的数据集合。 程序一般都需要存储大量的数值。假设&#xff0c;举个例子&#xff0c;需要读取100个数字&#xff0c;计算出它们的平均值&#xff0c;然后找出多少个数字是高于这个平均值的。程序首先读取100个数字并计算它…

基于 matplotlib module 的物理示意图绘制

基于 matplotlib module 的物理示意图绘制 # 创建画布和子图 fig, ax plt.subplots()# 去除 x 轴和 y 轴的边框线 ax.spines[bottom].set_visible(False) ax.spines[top].set_visible(False) ax.spines[left].set_visible(False) ax.spines[right].set_visible(False)# 隐藏 …