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

文章目录

  • 一.单链表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永远指向NULL
	L->next=NULL;//头结点之后暂时没有结点
}

void testDLinkList()
{
	//初始化双链表
	DLinkLIst L;
	InitList(L);
}

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

  • 判断双链表是否为空
bool Empty(DLinkList L)
{
	if(L->next=NULL)
		return true;
	else
		return 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的后继节点q
	if(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
    在这里插入图片描述
    优:增删操作不需要移动大量元素
    缺:不能随机存取,只能从头结点依次向后查找;容量固定不变

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI 原生时代,更要上云:百度智能云云原生创新实践

本文整理自百度云智峰会 2024 —— 云原生论坛的同名演讲。 我今天分享的主题,是谈谈在云计算和 AI 技术快速发展和深入落地的背景下,百度智能云在云原生的基础设施产品和技术层面做的一些创新实践。 毋庸置疑,过去十几年云计算和 AI 技术是…

商场紧急情况处理:SpringBoot技术实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

.NET Core WebApi第7讲:项目的发布与部署

一、理解 前端跟后端拿数据,然后在前端页面中展示,就是我们要完成的事情。 把前端跟后端开发好之后,我们需要落地部署,这个时候就需要一个服务器。 服务器就是一台电脑,只要windows里面有一个叫IIS的管理器。 二、项目…

Python的PIL库初步使用:转换色彩空间

[] 简介 PIL,即Python图像处理库(Python Imaging Library),conda默认环境便已提供,如果没有,可通过pip安装 pip install pillow有了PIL,就可以对文件进行读取和存储,示例如下 from PIL import Image pa…

画质修复怎么调?一键将模糊图片变高清的窍门分享

就是说有同样拿起手机拍照就手抖的朋友吗? 小编每次都是因为手抖,拍出来的每一张照片都是虚焦糊糊的,几乎每一张!! 防抖功能都抵挡不住的虚焦,只能寄希望于各种图片画质修复清晰app来拯救这些糊糊的图片了…

智融SW2505 PD控制器 DRC 双向IC

1. 概述 SW2505 是一款高度集成的 PD 控制器。它符合的 USB Type-C 和 PD 3.1 标准,并支持 BC1.2 和最流行的高压快速充电协议,带有 DPDM 接口。它的目标是笔记本电脑、加密狗、显示器、移动电源和电源适配器。SW2505 集成了一个 32 位、高达 40MHz 的 …

Python数据分析-移动设备使用情况和用户行为分析

一、研究背景 在信息化飞速发展的今天,移动设备已成为人们生活和工作中的必备工具。智能手机普及率持续增长,用户使用行为不断增多,从娱乐、社交到办公、学习,手机的使用已渗透到各个年龄段和社会群体。移动设备使用情况的多样化…

vue-echarts使用

vue-echarts使用 排名柱状图示例代码 汇总示例代码 平均时效示例代码 全图 排名柱状图 示例 代码 // 排名趋势<!-- 排名数据趋势图 --><div class"rank"><div class"rank_title"><div class"rank_title_left"><spa…

华为云企业门户EWP SSL证书安装指南

一、申请 SSL 证书 在华测 Ctimall 网站&#xff08;SSL证书_域名ssl证书 - CTI华测检测官方商城&#xff09;申请 SSL 证书后&#xff0c;您将会收到一个压缩文件。该压缩文件包含四种证书格式&#xff0c;分别为&#xff1a;Tomcat、Nginx、IIS、Apache。其中&#xff0c;在 …

Docker 部署MongoDb

1. 编写docker-compose.conf 文件 version: 3 services:mongo:image: mongo:latest # 指定 MongoDB 版本&#xff0c;确保 > 3.6container_name: mongo-replicarestart: alwayscommand: ["mongod", "--replSet", "rs0", "--oplogSize&…

告别局域网限制:宝塔FTP结合内网穿透工具实现远程高效文件传输

文章目录 前言1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 前言 本文主要介绍宝塔FTP文件传输服务如何搭配内网穿透工具&#xff0c;实现随时随地远程连接局域网环境搭建的宝塔FTP文件服务并进行文件…

Qt/C++地图雷达扫描/动态扇形区域/标记线实时移动/轮船货轮动态轨迹/雷达模拟/跟随地图缩放

一、前言说明 地图雷达扫描的需求场景也不少&#xff0c;很多人的做法是直接搞个覆盖层widget&#xff0c;在widget上绘制雷达&#xff0c;优缺点很明显&#xff0c;优点是性能高&#xff0c;毕竟直接在widget上绘制性能明显比js中绘制要高&#xff0c;缺点是要么动态计算经纬…

Springboot集成阿里云通义千问(灵积模型)

我这里集成后&#xff0c;做成了一个工具jar包&#xff0c;如果有不同方式的&#xff0c;欢迎大家讨论&#xff0c;共同进步。 集成限制&#xff1a; 1、灵积模型有QPM(QPS)限制&#xff0c;每个模型不一样&#xff0c;需要根据每个模型适配 集成开发思路&#xff1a; 因有…

【CSS】入门详解

你是否曾经浏览网页时&#xff0c;被一些网站精美的布局、炫酷的动画和赏心悦目的色彩所吸引&#xff1f;这背后神奇的力量就是 CSS&#xff08;层叠样式表&#xff09;。CSS 就像网页的化妆师&#xff0c;它负责网页的样式和布局&#xff0c;让原本枯燥的 HTML 结构变得生动有…

【论文分享】HashGAT-VCA:一种结合哈希函数和图注意力网络的矢量元胞自动机模型,用于城市土地利用变化模拟

本文考虑地块内部异质性&#xff0c;提出一个结合哈希函数和图注意力网络&#xff08;GAT&#xff09;的矢量元胞自动机&#xff08;VCA&#xff09;方法&#xff0c;用于研究城市土地利用变化&#xff1b;并将该模型应用于模拟深圳市2009年至2012年的城市土地利用变化&#xf…

二十、Innodb底层原理与Mysql日志机制深入剖析

文章目录 一、MySQL的内部组件结构1、Server层1.1、连接器1.2、查询缓存1.3、分析器1.4、优化器1.5、执行器 2、存储引擎层 二、Innodb底层原理与Mysql日志机制1、redo log重做日志关键参数2、binlog二进制归档日志2.1、binlog日志文件恢复数据 3、undo log回滚日志4、错误日志…

安全芯片 OPTIGA TRUST M 使用介绍与示例(基于STM32裸机)

文章目录 目的资料索引硬件电路软件框架介绍数据存储框架移植框架使用 使用示例示例地址与硬件连接通讯测试功能测试 总结 目的 OPTIGA TRUST M 是英飞凌推出的安全芯片&#xff0c;芯片通提供了很多 slot &#xff0c;用于存放各类安全证书、密钥、用户数据等&#xff0c;内置…

10. NSTableView Table 数据表格

表格是非常重要和复杂的一个控件&#xff0c;本节会用大量篇幅来把表格这东西力求讲清楚。 基本设置 表格结构 表格是 OS X 组件中为数不多采用了MVC设计模式来实现的控件&#xff0c;即tableView–dataSource–Delegate&#xff0c;这种分层架构给处理数据带来了极大的便利…

控制流与循环:掌握程序的基本控制(2/10)

目录 控制流与循环&#xff1a;掌握程序的基本控制&#xff08;2/10&#xff09; 介绍 条件语句 基本用法 示例&#xff1a;判断用户输入的数字 条件语句中的逻辑运算符 示例&#xff1a;判断年龄阶段 循环结构 for 循环 示例 1&#xff1a;遍历列表 示例 2&#xf…

Python酷库之旅-第三方库Pandas(173)

目录 一、用法精讲 796、pandas.Float32Dtype类 796-1、语法 796-2、参数 796-3、功能 796-4、返回值 796-5、说明 796-6、用法 796-6-1、数据准备 796-6-2、代码示例 796-6-3、结果输出 797、pandas.Float64Dtype类 797-1、语法 797-2、参数 797-3、功能 797-…