当前位置: 首页 > 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 格…...

OceanBase V4.3.3,首个面向实时分析场景的GA版本发布

在10月23日举办的 OceanBase年度发布会 上&#xff0c;我们怀着激动之情&#xff0c;正式向大家宣布了 OceanBase 4.3.3 GA 版的正式发布&#xff0c;这也是OceanBase 为实时分析&#xff08;AP&#xff09;场景打造的首个GA版本。 2024 年初&#xff0c;我们推出了 4.3.0 版本…...

Maven随笔

文章目录 1、什么是MAVEN2、Maven模型3、Maven仓库4、项目集成1_Idea集成Maven设置2_创建Maven项目3_POM配置详解4_maven 坐标详情5_Maven工程类型6_导入Maven项目 5、依赖管理1_依赖配置2_依赖传递3_可选依赖4_排除依赖4_可选依赖和排除依赖的区别5_依赖范围6_继承与聚合7_版本…...

牛客题目解析

一.最长回文子串 1.题目&#xff1a;给定一个仅包含小写字母的字符串&#xff0c;求它的最长回文子串的长度。 最长回文子串__牛客网 2.算法原理&#xff1a; <1>动态规划算法:O(n^2),O(n^2) 具有通性&#xff0c;凡涉及回文子串的问题都可利用此法解决 知识储备&am…...

AG32的3个ADC可以并联使用吗

AG32的3个ADC可以并联使用吗&#xff1f; Customer: 需求&#xff1a; 在t1时间段&#xff0c;用5M的速度ch1通道采样得到结果1. 在t2时间段&#xff0c;用5M的速度ch2通道采样得到结果2. 在t3时间段&#xff0c;用5M的速度ch3通道采样得到结果3. 然后如此循环 。 考虑用3…...

什么是 OpenTelemetry?

OpenTelemetry 定义 OpenTelemetry (OTel) 是一个开源可观测性框架&#xff0c;允许开发团队以单一、统一的格式生成、处理和传输遥测数据&#xff08;telemetry data&#xff09;。它由云原生计算基金会 (CNCF) 开发&#xff0c;旨在提供标准化协议和工具&#xff0c;用于收集…...

[vulnhub]DC:7

https://www.vulnhub.com/entry/dc-7,356/ 端口扫描主机发现 探测存活主机&#xff0c;178是靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-03 13:30 CST Nmap scan report for 192.168.75.1 Host is up (0.00037s l…...

个性化十足的贵族服务器,惠普ML310e Gen8,服务器中的 “潘多拉魔盒”

个性化十足的贵族服务器&#xff0c;惠普ML310e Gen8&#xff0c;服务器中的 “潘多拉魔盒” 小伙伴们大家好呀&#xff0c;这里是勤奋的凯尔森同学&#xff0c;今天给大家分享一款好玩的服务器&#xff0c;惠普ML310e Gen8 V2&#xff0c;相比大家都很熟悉HP ProLiant MicroS…...

百度社招内推

百度社招内推 「百度内推」快来投递你心仪的职位吧&#xff08; 网申链接地址&#xff1a;https://dwz.cn/ah4OUcca&#xff09;&#xff0c;填入内推码&#xff0c;完成投递&#xff0c;get内推绿色通道~我的内推码&#xff1a;IZ9PVH 内推有什么好处&#xff1a; 简历直达…...

本地部署开源在线即时通讯软件Fiora打造个人私密聊天室

文章目录 前言1.关于Fiora2.安装Docker3.本地部署Fiora4.使用Fiora5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 相信大家在聊天时候总是很没安全感&#xff0c;比如在和小姐妹背着男朋友聊一些不能说的坏话&#xff0c;或者背着女朋友和兄…...

TS(类 接口 泛型)

文章目录 类复习相关知识属性修饰符public 修饰符属性的简写形式 protected修饰符private修饰符readonly修饰符 抽象类 接口&#xff08;interface&#xff09;定义类结构定义对象结构定义函数结构接口之间的继承接口自动合并 &#xff08;可重复定义&#xff09;一些相似的概念…...