线性表——带头循环双向链表的增删查改

 本节复习带头循环双向链表的增删查改。 

带头循环双向链表的结构很完美, 是我们日常生活中使用最多的一种链表的形式。 但是考的频率要少于单链表。

目录

双链表的全部接口

准备文件

建立双链表的结构体蓝图

 创建返回链表的头节点

申请新节点函数接口

双向链表尾插函数接口

 双向链表打印函数接口

双向链表头插函数接口

双向链表尾删函数接口 

双向链表头删函数接口 

双向链表查找函数接口 

双向链表在pos位置之前插入数据函数接口

双向链表删除pos位置节点函数接口 

双链表销毁函数接口 


双链表的全部接口

//返回双链表的头节点接口
DLNode* DLCreate();
//双链表尾插函数接口
void DLPushBack(DLNode* head, DSLDataType x);
//双链表打印函数接口
void DLPrint(DLNode* head);
//双链表头插函数接口
void DLPushFront(DLNode* head, DSLDataType x);
//双链表尾删函数接口
void DLEraseBack(DLNode* head);
//双链表头删函数声明
void DLEraseFront(DLNode* head);
//双链表查找函数接口
DLNode* ListFind(DLNode* head, DSLDataType x);
//双向链表再pos位置之前插入函数接口
void DLInsert(DLNode* head, DLNode* pos, DSLDataType x);
//双向链表删除pos位置节点函数接口
void DLErase(DLNode* head, DLNode* pos);
//双向链表销毁函数接口
void DLDestory(DLNode* head);

准备文件

三个文件, 一个main.c,  一个.h文件用于接口声明。 还有一个.c文件用于接口实现。

如图:

---------------------------------------------------------------------------------------------------------------------------------

建立双链表的结构体蓝图

先包含头文件, 将要保存的数据类型重新定义。如图:

然后创建结构体。

带头循环双向链表的结构体成员比单链表多出一个指向前一个节点的指针。 双向链表的取名就是从这取的。 每一个节点都是双向的。 一个指向下一个结点的指针, 一个指向上一个节点的指针。 还有一个保存数据的指针。

如图:

---------------------------------------------------------------------------------------------------------------------------------

 创建返回链表的头节点

该函数接口是为了创建哨兵位头节点。

.h声明: 

.c函数实现 

---------------------------------------------------------------------------------------------------------------------------------

申请新节点函数接口

尾插, 头插, 任意位置插入都需要申请新的链表节点。 所以可以将这个操作封装成为一个函数,然后在尾插, 头插, 任意位置插入函数中进行复用即可。

不需要在.h文件中声明

只需要在.c文件中实现。 确保尾插头插, 任意位置插入可以使用

.c实现:

---------------------------------------------------------------------------------------------------------------------------------

双向链表尾插函数接口

双向链表的尾插非常简单, 因为哨兵位头节点的prev指针指向尾节点, 所以可以直接用头节点的prev指针找到尾节点。 然后将新节点插到尾节点的后面。

尾插的实现方式如下: 这是第一步, 先让newnode前指针指向尾节点, 再让newnode的后指针指向head节点。

接下来是第二步:

让尾节点的后指针指向newnode, head的前指针指向newnode。注:头插, 任意位置插入都可以用类似的方法进行插入, 就是先让newnode的两个指针连接两边。 再让两边连接newnode。

.h函数声明

 .c函数实现

---------------------------------------------------------------------------------------------------------------------------------

 双向链表打印函数接口

我们已经实现了尾插函数, 接下来先实现打印函数, 方便验证我们写的函数是否正确。 

.h函数声明

.c函数实现

ok, 现在我们已经实现了该函数接口, 那么我们来验证我们前面的函数有没有错误 

如图, 经过检验, 大体没有错误。

 

---------------------------------------------------------------------------------------------------------------------------------

双向链表头插函数接口

.h函数声明

.c函数实现 

头插实现方法类似于尾插。 

---------------------------------------------------------------------------------------------------------------------------------

双向链表尾删函数接口 

尾删的流程如下:

.h函数声明

.c函数实现

---------------------------------------------------------------------------------------------------------------------------------

双向链表头删函数接口 

.h函数声明

.c函数实现

-------------------------------------------------------------------------------------------------------------------------------- 

双向链表查找函数接口 

.h函数声明

.c函数实现

---------------------------------------------------------------------------------------------------------------------------------

双向链表在pos位置之前插入数据函数接口

.h函数声明 

.c函数实现 

---------------------------------------------------------------------------------------------------------------------------------

双向链表删除pos位置节点函数接口 

.h函数声明

 .c函数实现

--------------------------------------------------------------------------------------------------------------------------------

双链表销毁函数接口 

每次都删除head后面一个节点。如图:

.h函数声明

.c函数实现 

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

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

相关文章

Uniapp有奖猜歌游戏系统源码,附带流量主

有奖猜歌游戏是一款基于uni-app、uniCloud、uniAD 开发的小游戏,通过猜歌曲、观看广告赚取现金奖励。 游戏基本特征 玩家可以通过猜歌、做任务等方式直接获取现金奖励 玩家可以通过猜歌、拆红包、做任务等方式获取金币奖励,当金币累积到一定数量可以兑…

9.用FFmpeg测试H.264文件的解码时间

1. Essence of Method 要测试对H.264文件的解码时间,可以使用FFmpeg进行操作。FFmpeg是一个开源的多媒体处理工具,可以用来处理视频和音频文件,包括解码H.264文件。以下是使用FFmpeg的命令行来测试解码时间的方法: ffmpeg -i in…

Java高级互联网架构师之路:排查当前JVM错误的步骤

程序 这个程序是有问题的,我们通过一些命令来分析这个程序究竟是哪里出了问题。首先把当前的程序通过SSH工具传输到centos系统中,之后我们就可以在linux环境下编译和执行。 注意一点:上面类的名字是Z,但是在linux环境下,我们将其改为了AA,并且文件名改为了AA,所以文章下…

GiT: Towards Generalist Vision Transformer through Universal Language Interface

GiT: Towards Generalist Vision Transformer through Universal Language Interface 相关链接:arxiv github 关键字:Generalist Vision Transformer (GiT)、Universal Language Interface、Multi-task Learning、Zero-shot Transfer、Transformer 摘要 …

Java项目:57 ssm011线上旅行信息管理系统ssm+vue

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本线上旅行信息管理系统,主要实现了用户功能模块和管理员功能模块两大部分 用户可查看旅行相关信息,注册登录后还可实…

简易版 RPC 框架实现 2.0 -netty实现

这一篇理解如果有难度,可能对netty不是很理解, 可以关注我netty专栏,还有另外一篇: 用 Netty 自己实现简单的RPC, 这一篇是学习netty的时候写的,更倾向于分析netty相关的知识, 今天我是学习dubb…

java:Druid工具类解析sql获取表名

java&#xff1a;Druid工具类解析sql获取表名 1 前言 alibaba的druid连接池除了sql执行的功能外&#xff0c;还有sql语法解析的工具提供&#xff0c;参考依赖如下&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>druid</ar…

使用paho.mqtt.client实现MQTT Client连接物联网平台(ThingsCloud)

目录 概述 1 ThingsCloud平台上创建项目 1.1 创建项目 1.2 配置App UI 2 认识paho.mqtt.client 3 实现MQTT Client 3.1 实现的接口介绍 3.2 paho.mqtt.client库函数介绍 3.3 MQTT Client类实现 3.3.1 创建项目 3.3.2 编写MQTT Client类代码 3.3.3 Log工具源码 4 实…

客户端:Vue3,服务端:Node,基于Socket.IO实现单聊的功能

目录 1.介绍 2.环境搭建 3.本功能实现的主要逻辑 4.客户端和服务端的主要代码 5.效果展示 6.socket.io的运作原理 1.介绍 本篇主要讲讲基于Socket.IO实现单聊功能的主要实现&#xff0c;包括了客户端和服务端Node。 在这个即时通讯无处不在的时代&#xff0c;实时聊天功能…

Java面试题总结18之springcloud四种分布式事务解决方案

XA规范&#xff1a;分布式事务规范&#xff0c;规定了分布式事务模型 四个角色&#xff1a;事务管理器&#xff08;协调者TM&#xff09;&#xff0c;资源管理器&#xff08;参与者RM&#xff09;&#xff0c;应用程序AP&#xff0c;通信资源管理器CRM 全局事务&#xff1a;一…

【Hadoop大数据技术】——MapReduce分布式计算框架(学习笔记)

&#x1f4d6; 前言&#xff1a;MapReduce是Hadoop系统核心组件之一&#xff0c;它是一种可用于大数据并行处理的计算模型、框架和平台&#xff0c;主要解决海量数据的计算问题&#xff0c;是目前分布式计算模型中应用较为广泛的一种。 目录 &#x1f552; 1. MapReduce概述&am…

JVM学习-JMM

目录 1.什么是JMM 2.JMM怎样保障数据的可见性、有序性、原子性 2.1保证原子性 2.2.保证可见性 2.3保证有序性 3.CAS 3.1乐观锁和悲观锁 3.2 CAS介绍 4.重量级锁的自旋优化 1.什么是JMM JMM即Java内存模型 &#xff0c;定义了一套在多线程读写共享数据&#xff08;如数组、成…

贪心算法(算法竞赛、蓝桥杯)--糖果传递

1、B站视频链接&#xff1a;A31 贪心算法 P2512 [HAOI2008] 糖果传递_哔哩哔哩_bilibili 题目链接&#xff1a;[HAOI2008] 糖果传递 - 洛谷 #include <bits/stdc.h> using namespace std; const int N1000005; int n,a[N],c[N]; long long b,ans;int main(){scanf(&quo…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:UIExtensionComponent (系统接口))

UIExtensionComponent用于支持在本页面内嵌入其他应用提供的UI。展示的内容在另外一个进程中运行&#xff0c;本应用并不参与其中的布局和渲染。 通常用于有进程隔离诉求的模块化开发场景。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0…

QT C++ QButtonGroup应用

//QT 中&#xff0c;按钮数量比较少&#xff0c;可以分别用各按钮的信号和槽处理。 //当按钮数量较多时&#xff0c;用QButtonGroup可以实现共用一个槽函数&#xff0c;批量处理&#xff0c;减少垃圾代码&#xff0c; //减少出错。 //开发平台&#xff1a;win10QT6.2.4 MSVC…

Xilinx FPGA模式配置

Xilinx FPGA模式配置 Xilinx UltraScale FPGA有7种配置模式&#xff0c;由模式输入引脚M[2:0]决定。七种模式如图1所示。 图1 7种配置模式 7种模式可分为3大类&#xff0c; 1、JTAG模式&#xff08;可归为从模式&#xff09;&#xff1b; 2、主模式&#xff1b; 3、从模式…

基于SpringBoot SSM vue办公自动化系统

基于SpringBoot SSM vue办公自动化系统 系统功能 登录 个人中心 请假信息管理 考勤信息管理 出差信息管理 行政领导管理 代办事项管理 文档管理 公告信息管理 企业信息管理 会议室信息管理 资产设备管理 员工信息管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: S…

OpenCV4.9.0开源计算机视觉库在 Linux 中安装

返回目录&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV 环境变量参考 下一篇&#xff1a;将OpenCV与gcc和CMake结合使用 引言&#xff1a; OpenCV是一个开源的计算机视觉库&#xff0c;由英特尔公司所赞助。它是一个跨…

【LeetCode热题100】146. LRU 缓存(链表)

一.题目要求 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c…

wsl or 虚拟机 安装

1.wsl2安装 WSL全称Windows Subsystem for Linux&#xff0c;是微软开发的适用于Linux的Windows子系统 如今已经有两代了&#xff1a; 所以用的多的还是wsl2。 安装前需要先去设置启用或关闭Windows功能&#xff1a; 打开适用于linux的子系统和虚拟机平台。 Microsoft Store里…