当前位置: 首页 > news >正文

数据结构——第二章 线性表(5)——双向循环链表

双向循环链表

  • 1.双向循环链表的定义
  • 2.双向循环链表的基本操作实现
  • 2.1 双向循环链表的初始化操作
    • 2.2.双向循环链表的插入操作
    • 2.3. 双向循环链表的删除操作

1.双向循环链表的定义

单向链表便于查询后继结点,不便于查询前驱结点。为了方便两个方向的查询,可以在结点中设两个指针域,一个存放直接前驱结点的地址,另一个存放直接后继结点的地址。
双向循环链表的数据类型描述如下。

typedef struct dnode
{
ElemType* data;
struct dnode* pre;//存放前驱结点的地址
struct dnode* next;//存放后继结点的地址
}DNode,*DLinkList;

2.双向循环链表的基本操作实现

2.1 双向循环链表的初始化操作

双向循环链表的初始化是创建一个带有头结点的空链表。
分析:初始化操作需要将申请的头结点地址分别赋给头指针以及头结点的两个指针域,双向循环链表为空的条件是L->next == L&&L->pre == L为真,算法如下。
【算法】

int initDLinkList(DLinkList* L)
{*L = (DLinkList)malloc(sizeof(DNode));if (*L == NULL){perror("initDLinkList::");exit(0);}(*L)->pre = (*L)->next = *L;return 1;
}

2.2.双向循环链表的插入操作

双向循环链表有两个方向,其后继方向的单向循环链表相同。
分析:插入新结点必须考虑前驱和后继方向的链接,插入位置按后继方向查找。由于新结点的两个指针域是无确定指向的,因此将按以下顺序完成。
(1)确定新结点的直接前驱和直接后继。
s->pre=p;s->next=p->next;
(2)确定p->next的直接前驱。
p->next->pre=s;
(3)确定p的后继。
p->next=s;
【算法】

int insertDLinkList(DLinkList L, int i, ElemType x)
{DLinkList p = L, s;int pos = 0;//让p指向第i-1个结点,pos记录结点的位置while (p->next != L && pos < i - 1){p = p->next;pos++;}if (p->next == L && pos<i - 1 || pos>i - 1){printf("插入位置不合理!\n");return 0;}s = (DLinkList)malloc(sizeof(DNode));if (s == NULL){perror("insertDLinkList::");return 0;}s->data = x;s->pre = p;s->next = p->next;p->next->pre = s;p->next = s;return 1
}

2.3. 双向循环链表的删除操作

【算法实现】

int deleteDLinkList(DLinkList L, int i)
{DLinkList p = L, q;int pos = 0;if (L->next == L && L->pre == L){printf("链表为空!\n");return 0;}while (p->next != L && pos < i - 1){p = p->next;pos++;}if (p->next == L || pos > i - 1){printf("删除位置不合理!\n");return 0;}q = p->next;p->next = q->next;p->next->pre = p;free(q);return 1;
}

相关文章:

数据结构——第二章 线性表(5)——双向循环链表

双向循环链表1.双向循环链表的定义2.双向循环链表的基本操作实现2.1 双向循环链表的初始化操作2.2.双向循环链表的插入操作2.3. 双向循环链表的删除操作1.双向循环链表的定义 单向链表便于查询后继结点&#xff0c;不便于查询前驱结点。为了方便两个方向的查询&#xff0c;可以…...

4面美团软件测试工程师,却忽略了这一点,直接让我前功尽弃

说一下我面试别人时候的思路 反过来理解&#xff0c;就是面试时候应该注意哪些东西&#xff1b;用加粗部分标注了 一般面试分为这么几个部分&#xff1a; 一、自我介绍 这部分一般人喜欢讲很多&#xff0c;其实没必要。大约5分钟内说清楚自己的职业经历&#xff0c;自己的核…...

robot remote server用这个server去远程获取ip

server端配置&#xff1a; 1、安装python环境 2、下载robot remote server 下载地址&#xff1a;https://pypi.python.org/pypi/robotremoteserver/&#xff08;不要用pip下载&#xff0c;把robotremoteserver.py文件下载下来&#xff09; 3、首先创建一个目录E:\rfremote\ &a…...

【WSL】Windows 上安装并启动

一、什么是 WSL Windows Subsystem for Linux 适用于 Linux 的 Windows 子系统 可以帮助我们自然、方便地在 Windows 上使用 Linux 子系统 二、安装 我们要安装的是 WSL2 &#xff0c; 因为其功能相对来说更加完善 1. 简化安装 — 本人亲测不好用 简化安装&#xff1a;高…...

SAFe(Scaled Agile Framework)学习笔记

1.SAFe 概述 SAFe&#xff08;Scaled Agile Framework&#xff09;是一种面向大型企业的敏捷开发框架&#xff0c;旨在协调多个团队和部门的协同工作&#xff0c;以实现高效的软件开发和交付。下面是SAFe框架的简单介绍总结&#xff1a; SAFe框架包括以下四个层次&#xff1a…...

Redis 集群搭建

前缀参考文章1&#xff1a;Centos7 安装并启动 Redis-6.2.6 前缀参考文章2&#xff1a;Redis 主从复制-服务器搭建【薪火相传/哨兵模式】 管道符查看所有redis进程&#xff1a;ps -ef|grep redis 杀死所有redis进程&#xff1a;killall redis-server 1. 首先修改 redis.conf 配…...

【Unity VR开发】结合VRTK4.0:创建物理按钮

语录&#xff1a; 如今我努力奔跑&#xff0c;不过是为了追上那个曾经被寄予厚望的自己 前言&#xff1a; 使用线性关节驱动器和碰撞体从动器可以轻松创建基于物理的按钮&#xff0c;以使交互者能够在物理上按下按钮控件&#xff0c;然后挂钩到驱动器事件中以了解按钮何时被按…...

【软件测试】web自动化测试如何开展合适?自动化测试用例如何设计?资深测试的总结......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 首先&#xff0c;还…...

ARouter::Compiler The user has configuration the module name, it was

学习组件化使用的是阿里的ARouter&#xff0c;我是照着案例敲的&#xff0c;在编译的时候报了这么一个错。 我查了好多资料&#xff0c;大部分都是说build.gradle 配置出现了问题&#xff0c;比如没有配置 javaCompileOptions {annotationProcessorOptions {arguments [AROUTE…...

Jmeter(GUI模式)详细教程

Jmeter&#xff08;GUI模式&#xff09;详细教程 目录&#xff1a;导读 一、安装Jmeter 二、Jmeter工作原理 三、Jmeter操作步骤 Jmeter界面 1、测试计划 2、线程组 3、HTTP请求 4、监听器 四、压力测试 写在最后 前些天&#xff0c;领导让我做接口的压力测试。What…...

2023年CDGA考试-第14章-大数据和数据科学(含答案)

2023年CDGA考试-第14章-大数据和数据科学(含答案) 单选题 1.MapReduce模型有三个主要步骤 () A.剖析、关联、聚类 B.提取、转换、加载 C.映射、修正、转换 D.映射、洗牌、归并 答案 D 2.以下哪种技术已经成为面向数据科学的大数据集分析标准平台。 A.MPP技术。 B.Hado…...

【阿旭机器学习实战】【36】糖尿病预测---决策树建模及其可视化

【阿旭机器学习实战】系列文章主要介绍机器学习的各种算法模型及其实战案例&#xff0c;欢迎点赞&#xff0c;关注共同学习交流。 【阿旭机器学习实战】【36】糖尿病预测—决策树建模及其可视化 目录【阿旭机器学习实战】【36】糖尿病预测---决策树建模及其可视化1. 导入数据并…...

简易黑客初级教程:黑客技术,分享教学

第一节&#xff0c;伸展运动。这节操我们要准备道具&#xff0c;俗话说&#xff1a;“工欲善其事&#xff0c;必先利其器”(是这样吗?哎!文化低……)说得有道理&#xff0c;我们要学习黑客技术&#xff0c;一点必要的工具必不可少。 1&#xff0c;一台属于自己的可以上网的电…...

日本公派访问学者的具体申请流程

公派日本访问学者的具体申请流程&#xff0c;知识人网整理了相关的资料以供大家参考。第一、申请材料一般申请CSC日本访问学者&#xff0c;截止日是每年的1月15号左右&#xff0c;但是学院在1月10号之前就审查材料了。材料包括&#xff1a;CSC网页的报名表&#xff0c;教授邀请…...

投票点赞链接制作投票链接在线制作投票图文链接制作点赞

用户在使用微信投票的时候&#xff0c;需要功能齐全&#xff0c;又快捷方便的投票小程序。而“活动星投票”这款软件使用非常的方便&#xff0c;用户可以随时使用手机微信小程序获得线上投票服务&#xff0c;很多用户都很喜欢“活动星投票”这款软件。“活动星投票”小程序在使…...

PHY设备驱动

1. 概述 MAC控制器的驱动使用的是platform总线的连接方式&#xff0c;PHY设备驱动是基于device、driver、bus的连接方式。 其驱动涉及如下几个重要部分&#xff1a; 总线 - sturct mii_bus (mii stand for media independent interface) 设备 - struct phy_device 驱动 - struc…...

Linux——UDP协议与相关套接字编程

一.概念在网络通信中&#xff0c;传输层中最常用的通信协议有两个&#xff1a;TCP协议与UDP协议。这两种协议虽然都可以用于网络通信&#xff0c;但是通信方式不同决定了应用场景的不同。与TCP协议相比&#xff0c;UDP协议最具特色的不同点有两个&#xff1a;无连接与面向数据报…...

EM算法 简明理解

E&#xff1a;Expection&#xff0c;期望步&#xff0c;利用估计的参数&#xff0c;来确定未知因变量的概率&#xff0c;并利用其来计算期望值。 M&#xff1a;Maximization&#xff0c;最大化&#xff0c;使用最大似然法更新参数值&#xff0c;使E步中期望值出现的概率最大。…...

论坛项目小程序和h5登录

项目中安装uview出现npm安装uview 直接报错&#xff1a;创建一个package.json配置文件在进行安装。cmd到项目。初始化一个package.json文件&#xff08;vue项目的配置文件&#xff09; npm init --yes 安装uview项目点击关注进入管页面&#xff0c;需要验证用户是否登录查用户是…...

kubernetes集群pod中的pause容器作用

kubernetes集群pod中的pause容器作用 我们搭建完集群了以后&#xff0c;可以使用最简单的方式创建一个pod&#xff0c;随意你建立什么pod&#xff0c;去访问相应node上执行docker ps 就会看到有一种pause容器&#xff0c;但是你可能从来没有启用 etrics-scraper_dashboard-me…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...