数据结构之双链表——考研笔记
文章目录
- 一.单链表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
- 循环单链表尾结点指向头结点

- 初始化循环单链表时,需要把头结点的next指针指向头结点本身
bool InitList(LinkList &L)
{L=(LNode*)malloc(sizeof(LNode));//分配头结点if(L==NULL)return false;L->next=L;return true;
}
//判断某节点是否为表尾结点
判断p->next==L
- 循环单链表从一点出发可以找到所有结点
- 单链表从一点出发只能向后查找
- 循环双链表

初始化双链表头尾指针都指向自己

//双链表插入
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;//下一个元素数组下标
};

- 初始化静态链表:a[0]的next设为-1
- 查找:从头结点开始依次遍历
- 插入位序为i的节点:
- 找到一个空闲节点,存入数据元素
- 从头结点出发找到位序为i-1的节点
- 修改新的节点
- 修改i-1号结点的next
- 可让空闲节点设为特殊值如-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模块旨在改进图像处理和计算机视觉任务中的上采样过程࿰…...
【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的电压和频率调大最…...
自杀一句话木马(访问后自动删除)
在做安全测试时,例如文件上传时就要上传可以解析的脚本文件解析证明存在漏洞,这个时候就需要(访问后自动删除文件的一句话木马) PHP <?php echo md5(1);unlink(__FILE__); ?> 访问后自动删除...
Nginx 反向代理(解决跨域)
文章目录 前言一、同源策略二、跨域是什么?三、Nginx解决跨域1.前端示例代码2.说明 四、nginx反向代理配置五、启动nginx六、最终效果总结 前言 Nginx反向代理解决跨域 一、同源策略 定义:同源策略(Same-Origin Policy)是指浏览…...
gRPC-4种通信模式
4种通信模式 1、简单模式(Simple RPC) 简单模式:也称简单 RPC,即客户端发起一次请求,服务端响应处理后返回一个结果给客户端。 在 proto 文件中可如下定义: rpc SayHello(HelloRequest) returns (Hello…...
第五项修炼—系统思考
感谢合作伙伴的推荐,圆满结束为期两天的马上消费《第五项修炼—系统思考》项目!这不仅是一次培训,更是未来实践的起点。 两天的系统思考学习让我们看到,在技术管理的每个决策背后,都蕴含着深刻的系统关联。希望各位技…...
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 文档可以通过多种库和方法实现。以下是几种常用的方法: 1. 使用 Apache POI Apache POI 是一个强大的库,可以用来读写 Microsoft Office 格…...
YOLOv8无人机识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置)
摘要 针对低空无人机(drone)的检测需求,本文基于YOLOv8目标检测算法构建了一个无人机识别系统。实验采用自建无人机数据集,包含训练集1012张图像、验证集347张图像,类别为单一目标“drone”。模型训练过程中ÿ…...
GPT-Image-2 老是生成失败?完整排查和修复指南,5 个真根因逐个击破
GPT-Image-2 老是生成失败?完整排查和修复指南,5 个真根因逐个击破GPT-Image-2 的处理时间比文字模型长很多——高质量 1024px 需要 145-280 秒。大多数所谓的"生成失败"其实不是模型问题,而是网络链路(CDN、反代、SDK&…...
Git Common Errors
Git Common Errors 1. 这篇文章解决什么问题? Git 报错时,最容易让人慌的不是错误本身,而是不知道它在说哪一层出了问题。 常见错误包括: 1. not a git repository 2. remote origin already exists 3. failed to push some r…...
基于MCP协议与Graph API实现AI助手无缝集成Outlook邮箱
1. 项目概述与核心价值 最近在折腾AI工作流,发现一个挺有意思的项目: ajaya/outlook-app-mcp 。简单来说,这是一个能让你的AI助手(比如Claude Desktop、Cursor等支持MCP协议的客户端)直接读取和操作你Outlook邮箱的…...
LabVIEW触发采集实战:从原理到多通道同步实现
1. 项目概述:为什么我们需要触发采集?在数据采集领域,尤其是自动化测试、设备监控和信号分析等场景,我们常常会遇到一个核心痛点:如何精准地捕捉到我们真正关心的那一段信号?想象一下,你正在监测…...
免费Windows风扇控制神器:FanControl让你的电脑静音又凉爽
免费Windows风扇控制神器:FanControl让你的电脑静音又凉爽 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendin…...
服务器上5分钟搞定:用wget直接下载并配置mongodump备份工具(Linux实战)
服务器极速部署指南:5分钟完成mongodump备份工具配置 在Linux服务器运维中,时间就是效率。想象一下这样的场景:凌晨三点收到数据库告警,你需要立即建立备份机制,但传统的"下载-上传-配置"流程至少需要15分钟…...
2026届最火的AI论文助手解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在人工智能生成内容(AIGC)技术迅猛发展之际,它一方面提升…...
配电箱国家标准最新解读:GB/T 7251系列关键更新与合规要点
作为低压配电系统的核心设备,配电箱的质量直接关乎电力安全与人民生命财产安全。近年来,GB/T 7251《低压成套开关设备和控制设备》系列标准持续迭代升级,为行业规范化发展提供了重要技术支撑。本文从行业观察视角,系统梳理该系列标…...
超越‘点亮出图’:深入Sensor AE增益配置的三种模式与实战验证(以SC230AI/OV08A10/IMX335为例)
超越“点亮出图”:深入Sensor AE增益配置的三种模式与实战验证 在嵌入式Camera开发领域,成功点亮Sensor并输出图像仅仅是万里长征的第一步。真正的挑战往往出现在图像质量调优阶段,尤其是自动曝光(AE)与增益配置这一专…...
