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

数据结构之双链表——考研笔记

文章目录

  • 一.单链表VS双链表
  • 二.创建双链表(带头结点)
  • 三.双链表的插入
  • 四.双链表删除
  • 五.销毁双链表
  • 六.双链表遍历
  • 七. 循环链表
  • 八.静态链表
    • 1.用代码定义一个静态链表

一.单链表VS双链表

  • 单链表中只包含指向它后继结点的指针,所以给定一个结点p找到它的前驱结点很麻烦
  • 双链表:在单链表的基础上再增加一个指针域
    在这里插入图片描述
typedef struct DNode//定义双链表结点类型
{ElemType data;//数据域struct DNode *prior,*next;//前驱和后继指针
}DNode,*DLinkList;

在这里插入图片描述

二.创建双链表(带头结点)

typedef struct DLinkList
{ElemType data;struct DNode *prior,*next;
}DNode,*DLinkList;bool InitDList(DLinkList &L)
{DNode L=(DNode*)malloc(sizeof(DNode));if(L==NULL)return false;L->prior=NULL;//头节点的prior永远指向NULLL->next=NULL;//头结点之后暂时没有结点
}void testDLinkList()
{//初始化双链表DLinkLIst L;InitList(L);
}

在这里插入图片描述
在这里插入图片描述

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

三.双链表的插入

在p结点后插入s结点
在这里插入图片描述

bool InsertDList(DNode *p,DNode *s)
{s->next=p->next;//将结点*s插入到*p之后p->next->prior=s;//如果p是最后一个指针,出现空指针错误,不严谨s->prior=p;p->next=s;
}

改进

bool InserDList(DLinkList p,DLinkList s)
{if(p==NULL||s==NULL)//非法参数return false;s->next=p->next;if(p->next!=NULL)//p结点有后继节点p->next->prior=s;s->prior=p;p->next=s;
}

在这里插入图片描述

四.双链表删除

  • 删除p的后继节点q
p->next=q->next;
p->next->prior=p;
free(q);

在这里插入图片描述

bool DeleteNextDList(DLNode *p)
{if(p==NULL)return false;DNode *q=p->next;//找到p的后继节点qif(q==NULL)return false;p->next=q->next;if(q->next!=NULL)q->next->prior=p;//q结点不是最后一个节点free(q);return true;
}

五.销毁双链表

bool DestroyDList(DLinkList &L)
{//循环释放各个数据节点while(L->next!=NULL)DeleteNextDList(L);free(L);//释放头结点L=NULL;//头指针指向NULL
}

六.双链表遍历

//后向遍历
while(p!=NULL)//对p结点进行次相应的处理p=p->next;
}
//前向遍历(跳过头结点)
while(p->prior!=NULL)p=p->prior;

按位查找和按值查找O(n)
在这里插入图片描述

七. 循环链表

在这里插入图片描述

  • 单链表尾结点指向NULL
  • 循环单链表尾结点指向头结点
    在这里插入图片描述
  1. 初始化循环单链表时,需要把头结点的next指针指向头结点本身
bool InitList(LinkList &L)
{L=(LNode*)malloc(sizeof(LNode));//分配头结点if(L==NULL)return false;L->next=L;return true;
}
//判断某节点是否为表尾结点
判断p->next==L
  • 循环单链表从一点出发可以找到所有结点
  • 单链表从一点出发只能向后查找
  1. 循环双链表
    在这里插入图片描述
    初始化双链表头尾指针都指向自己
    在这里插入图片描述
//双链表插入
bool Insert(LNode *p,LNode *m)
{m->next=p->next;p->next->prior=m;m->prior=p;p->next=m;
}
//双链表删除
p->next=m->next;
m->next->prior=p;
m(free);

在这里插入图片描述

八.静态链表

单链表:各个结点在内存中随机存放
静态链表:在内存中分配一块连续空间,各个节点集中安置
包含数据元素和下一节点的数组下标。
在这里插入图片描述

在这里插入图片描述

1.用代码定义一个静态链表

#define MaxSize 10
struct Node//静态链表结构类型定义
{ElemType data;//存储数据元素int next;//下一个元素数组下标
};

在这里插入图片描述

  1. 初始化静态链表:a[0]的next设为-1
  2. 查找:从头结点开始依次遍历
  3. 插入位序为i的节点:
    • 找到一个空闲节点,存入数据元素
    • 从头结点出发找到位序为i-1的节点
    • 修改新的节点
    • 修改i-1号结点的next
  4. 可让空闲节点设为特殊值如-2
    在这里插入图片描述
    优:增删操作不需要移动大量元素
    缺:不能随机存取,只能从头结点依次向后查找;容量固定不变

相关文章:

数据结构之双链表——考研笔记

文章目录 一.单链表VS双链表二.创建双链表(带头结点)三.双链表的插入四.双链表删除五.销毁双链表六.双链表遍历七. 循环链表八.静态链表1.用代码定义一个静态链表 一.单链表VS双链表 单链表中只包含指向它后继结点的指针,所以给定一个结点p找…...

Django视图写法

1.View:Django默认的视图基类,Django的HttpRequeset对象 2.APIView:REST-framework提供的所有视图的基类,继承自Django的View REST framework的Request对象 Request对象的数据是自动根据前端发送数据的格式进行解析之后的结果。 serializer Book…...

单臂路由实现不同VLAN之间设备通信

转载请注明出处 本实验为单臂路由配置,目的为让不同VLAN之间的设备能够互相通信。 1.首先,按照要求配置两个pc的ip地址,以pc0为例子: 2在交换机创建vlan10和vlan20 3.划分vlan,pc0为vlan10的设备,pc1为vla…...

Linux·进程控制(system V)

1. 共享内存 system V共享内存是最快的IPC形式,之前的管道是基于Linux内核开发的通讯方案,其读写接口都是现成的,因此内核设计者为了完成进程间通讯任务并不需要新增太多代码。而共享内存属于system V标准,是操作系统单独…...

华为云Stack名词解释

1、MRS MapReduce服务(MRS)是一种基于云计算平台的即开即用、稳定可靠、弹性伸缩、便捷管理的数据处理分析服务。 2、VBS 云硬盘备份服务(VBS,Volume Backup Service)可为云硬盘(EVS,Elastic…...

YoloV9改进策略:上采样改进|CARAFE,轻量级上采样|即插即用|附改进方法+代码

论文介绍 CARAFE模块概述:本文介绍了一种名为CARAFE(Content-Aware ReAssembly of FEatures)的模块,它是一种用于特征上采样的新方法。应用场景:CARAFE模块旨在改进图像处理和计算机视觉任务中的上采样过程&#xff0…...

【C++】多态的语法与底层原理

1.多态的概念 1.1 概念 多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会 产生出不同的状态。 举个例子:在现实当中,我们去火车站买票,一般都分三种情况&…...

RTP和RTCP的详细介绍及其C代码示例

RTP和RTCP的详细介绍及其C代码示例 RTP和RTCP简介RTP协议详解RTCP协议详解RTP和RTCP之间的关系C代码示例RTP和RTCP简介 RTP(Real-time Transport Protocol,实时传输协议)和RTCP(Real-time Transport Control Protocol,实时传输控制协议)是流媒体传输中常用的两个协议。R…...

深入浅出了解AI教育发展与落地应用情况

2023年,是生成式AI能力涌现的一年,通用大模型是其中的主旋律。经过一年的发展,通用大模型格局已初步形成,生成式AI也从能力展示走向应用落地。进入2024年,对生成式AI的讨论和实践也都转向如何赋能产业。相比于通用大模型,进入产业内的大模型需要的是对行业的Know-How,以…...

Hive数据库操作语法

数据类型 内部表和外部表 内部表 (CREATE TABLE table_name ......)未被external关键字修饰的即是内部表, 即普通表。 内部表又称管理表,内部表数据存储的位置由hive.metastore.warehouse.dir参数决定(默认:/user/h…...

容器架构-Docker的成长之路

目录 1. 什么是容器 2. 容器 vs 虚拟机 3. Docker极速上手指南 环境准备 3.1 配置docker源 3.2 下载镜像加速的配置 3.3 下载自动补全工具 4. Docker C/S架构 5. Docker的镜像管理 5.1 下载nginx:alpine镜像并查看 5.2 sl大法 5.3 删除镜像 5.4 镜像清理用的命令 5…...

关于我、重生到500年前凭借C语言改变世界科技vlog.14——常见C语言算法

文章目录 1.冒泡排序2.二分查找3.转移表希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力! 根据当前所学C语言知识,对前面知识进行及时的总结巩固,出了这么一篇 vlog 介绍当前所学知识能遇到的常见算法,这些算法是…...

简记Vue3(三)—— ref、props、生命周期、hooks

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...

ARM cpu算力KDMIPS测试

一、引言 KDMIPS(KiloDhrystone Million Instructions Per Second)是一种衡量处理器性能的指标,它表示处理器每秒钟可以执行多少百万条Dhrystone指令。 二、测试说明 1、将cpu模式调整为perfermance 2、将cpu的频率和gpu的频率调大最大 3、将ddr和各core的电压和频率调大最…...

自杀一句话木马(访问后自动删除)

在做安全测试时&#xff0c;例如文件上传时就要上传可以解析的脚本文件解析证明存在漏洞&#xff0c;这个时候就需要(访问后自动删除文件的一句话木马) PHP <?php echo md5(1);unlink(__FILE__); ?> 访问后自动删除...

Nginx 反向代理(解决跨域)

文章目录 前言一、同源策略二、跨域是什么&#xff1f;三、Nginx解决跨域1.前端示例代码2.说明 四、nginx反向代理配置五、启动nginx六、最终效果总结 前言 Nginx反向代理解决跨域 一、同源策略 定义&#xff1a;同源策略&#xff08;Same-Origin Policy&#xff09;是指浏览…...

gRPC-4种通信模式

4种通信模式 1、简单模式&#xff08;Simple RPC&#xff09; 简单模式&#xff1a;也称简单 RPC&#xff0c;即客户端发起一次请求&#xff0c;服务端响应处理后返回一个结果给客户端。 在 proto 文件中可如下定义&#xff1a; rpc SayHello(HelloRequest) returns (Hello…...

第五项修炼—系统思考

感谢合作伙伴的推荐&#xff0c;圆满结束为期两天的马上消费《第五项修炼—系统思考》项目&#xff01;这不仅是一次培训&#xff0c;更是未来实践的起点。 两天的系统思考学习让我们看到&#xff0c;在技术管理的每个决策背后&#xff0c;都蕴含着深刻的系统关联。希望各位技…...

PYNQ 框架 - VDMA驱动 - 帧缓存

目录 1. 简介 2. 代码分析 2.1 _FrameCache 类定义 2.1.1 xlnk.cma_array() 2.1.2 pointerNone 2.1.3 PynqBuffer 2.2 _FrameCache 例化与调用 2.3 _FrameCache 测试 2.4 _FrameList 类定义 2.5 _FrameList 例化与调用 2.6 _FrameList 测试 3. 帧的使用 3.1 读取帧…...

Java导出Word文档的几种方法

文章目录 1. 使用 Apache POI2. 使用 Docx4j3. 使用 JODConverter4. 使用 FreeMarker 模板 在 Java 中导出 Word 文档可以通过多种库和方法实现。以下是几种常用的方法&#xff1a; 1. 使用 Apache POI Apache POI 是一个强大的库&#xff0c;可以用来读写 Microsoft Office 格…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...