数据结构——线性表(循环链表)
一、循环链表定义
将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一 个环,这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list)。
循环链表解决了一个很麻烦的问题。如何从当中一 个结点出发,访问到链表的全部结点。为了使空链表与非空链表处理一致,我们通常设一个头结点,当然,这并不是说循环链表一定要头结点,这需要注意。
二、循环列表的基本操作
循环列表的操作原理和单链表相似。
1、循环链表创建
//创建循环链表
cirLinkList LinkList_create(){cirLinkList header = (cirLinkList)malloc(sizeof(Node));header->next = header;return header;
}
2、 循环链表 插入元素
//循环链表L中第i个元素位置插入e值
int cirLinklist_insert(cirLinkList head, int i, ElemType e) {cirLinkList p = head;int j = 0;while (p && j < i){p = p->next;j++;}if(!p || j > i+1){return ERROR;}cirLinkList s = (cirLinkList)malloc(sizeof(cirLinkList));s->data = e;s->next = p->next;p->next = s;return OK;
}
3、循环链表删除元素
//循环链表L中删除第i个元素
int cirLinklist_del(cirLinkList list,int i)
{cirLinkList head = list;int j = 0;while(head && j < i){head = head->next;j++;}if(!head || j > i){return ERROR;}cirLinkList q;q = head->next;q->next = head->next->next;head->next = q->next;free(q);return OK;
}
4、循环链表 输出所有元素
//打印循环链表中所有的元素
void cirLinkList_print(cirLinkList list)
{cirLinkList head = list->next;while(head != list){printf("%d ",head->data);head = head->next;}printf("\n");
}
5、输出循环链表中指定位置的元素
// //返回L中第i个数据元素的值
ElemType cirLinkList_getElem(cirLinkList list,int i){cirLinkList p = list->next;int j = 0;while(p && j < i){p = p->next;j++;}if(!p || j > i){return ERROR;}return p->data;
}
6、销毁循环链表
//销毁循环链表
void cirLinkList_destroy(cirLinkList heard){if(heard == NULL){return;}cirLinkList p = heard->next;cirLinkList q = NULL;while(p != heard){q = p->next;free(p);p = q;}free(heard);
}
代码示例:
int main()
{cirLinkList list;list = LinkList_create();cirLinklist_insert(list,0,1);cirLinkList_print(list);cirLinklist_insert(list,0,2);cirLinkList_print(list);cirLinklist_insert(list,1,3);cirLinkList_print(list);cirLinklist_insert(list,1,4);cirLinkList_print(list);int data = cirLinkList_getElem(list,1);printf("%d \n",data);cirLinklist_del(list,1);cirLinkList_print(list);cirLinkList_destroy(list);return 0;
}
运行结果:
三、循环列表的适用范围
循环链表的优点在于可以实现循环访问和循环操作,适用于需要循环遍历的场景,比如游戏中的循环动作、循环播放音乐等。同时,循环链表也可以用于构建环形队列等数据结构。
相关文章:
数据结构——线性表(循环链表)
一、循环链表定义 将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一 个环,这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list)。 循环链表解决了一个很麻烦的问题。如何从当中一 个结点出发&am…...
深度剖析机构号矩阵系统:如何根据业务需求做出明智选择
在数字化营销的浪潮中,短视频平台如抖音、快手等已成为品牌传播和用户互动的重要渠道。为了更高效地管理这些平台的账号,机构号矩阵系统应运而生。本文将深度剖析机构号矩阵系统,并探讨如何根据业务需求做出明智的选择。 机构号矩阵系统概述…...
go语言的基础语法
基础语法 与python、vue等类似,go语言也分常量和变量等,常量用const(不可变)和变量var(可变)定义 常量 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型,值不可更改,表达式只支…...
Modbus转Ethernet/IP网关模块与汇川PLC通讯案例
Modbus转Ethernet/IP网关模块(XD-MDEP100)是一种用于将Modbus协议转换为Ethernet/IP协议的设备。它可以将Modbus RTU和Modbus TCP两种不同格式的Modbus数据包转换为Ethernet/IP协议的数据包,实现不同厂家的设备之间的数据交换和共享。在汇川P…...
【玩转python】入门篇day11-位运算
1、位运算语法 计算机中所有的数据都是以二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(、-、、/)都是叫位运算,相比在代码中直接使用(、-、、/)运算符,合理的运用位运算更能显著提高代码在机器上的执行效率。 …...
【Gitlab】记一次升级 Gitlab 后 API 失效的问题
背景 前段时间,因内部使用的 Gitlab 版本存在漏洞,需要进行升级,于是乎,将 Gitlab 从 16.6.0 升级到 16.11.3。而我们项目有个接口是用于获取 Gitlab 上的开发人员。 然后,今天,突然发现这个接口获取不到…...
2024.7.19 作业
1.链表的排序 int list_sort(NodePtr L) {if(NULLL || L->len<1){printf("排序失败");return -1;}int lenL->len1;NodePtr p;int i,j;for( i1;i<len;i){for( j0,pL;j<len-i;j,pp->next){if( p->data > p->next->data ){datatype tp-&…...
python如何创建SQLite 数据库连接,如何将数据库存储在内存中?
嗨,大家好,我是兰若姐姐。今天给大家说下如何创建SQLite 数据库连接,并将数据库存储在内存中,这是一种临时的、私有的数据存储空间,一般用于以下情形: 什么都不说,先上代码: import sqlite3创建数据库连接…...
机器学习-20-基于交互式web应用框架streamlit的基础使用教程
参考简洁而优雅地展示你的算法和数据——streamlit教程(一) 原理介绍与布局控制 参考Streamlit 讲解专栏(二):搭建第一个应用 Streamlit 讲解专栏(三):两种方案构建多页面 Streamlit 讲解专栏(五):探索强大而灵活的 st.write() 函数 1 streamlit 1.1 运行原理 im…...
基于luckysheet实现在线电子表格和Excel在线预览
概述 本文基于luckysheet实现在线的电子表格,并基于luckyexcel实现excel文件的导入和在线预览。 效果 实现 1. luckysheet介绍 Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。 官方文档在线Demo 2. 实现 …...
【学习笔记】无人机系统(UAS)的连接、识别和跟踪(一)-3GPP TS 23.256 技术规范概述
3GPP TS 23.256 技术规范,主要定义了3GPP系统对无人机(UAV)的连接性、身份识别、跟踪及A2X(Aircraft-to-Everything)服务的支持。 3GPP TS 23.256 技术规范: 以下是文档的核心内容总结: UAV系…...
sqlalchemy_dm
1、参考文档: https://blog.csdn.net/njcwwddcz/article/details/126554118 https://eco.dameng.com/document/dm/zh-cn/pm/dmpython-dialect-package.html 2、生成工具 sqlalchemy2.0.0.zip 3、安装步骤 conda create --name kes --clone kes1 rz unzip sql…...
基于springboot+vue+uniapp的驾校预约平台小程序
开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…...
echarts实现3d柱状效果
代码如下,单个的调第一个方法,多个柱状的调第二个方法,具体情况修改参数或者二次开发即可 //3d柱状图 export function getEcharts3DBar (xAxisData:string[][name1,name2,name3], data:number[][1,2,3], colorObj:IBaseObject{topStartColo…...
Flask校验
WTForms 是一个 Python 库,用于处理和验证 Web 表单。它提供了很多功能来简化表单处理,包括字段类型、验证器、错误消息等。在 WTForms 中,validate 机制是用于确保表单数据满足特定条件的关键部分。 1.验证器(Validators&#x…...
web前端 Vue 框架面试120题(一)
面试题 1 . 简述Vue的MVVM 模式? 参考回答: MVVM 是 Model-View-ViewModel的缩写,即将数据模型与数据表现层通过数据驱动进行分离,从而只需要关系数据模型的开发,而不需要考虑页面的表现,具体说来如下:M…...
UniApp__微信小程序项目实战 实现长列表分页,通过 onReachBottom 方法上划分次加载数据
UniApp 实现长列表分页,通过 onReachBottom 方法上划分次加载数据 项目实战中比较常见,方便下次使用 文章目录 一、应用场景? 二、作用 三、使用步骤? 3.1 实现的整体思路? …...
数据结构(功能受限的表-栈队列)
功能受限的表结构 一、栈和队列介绍 栈和队列是两种重要的线性结构,从数据结构角度,他们都是线性表,特殊点在于它们的操作被限制,也就是所谓的功能受限,统称功能受限的线性表 从数据类型角度,它们也可以是…...
高数知识补充----矩阵、行列式、数学符号
矩阵计算 参考链接:矩阵如何运算?——线性代数_矩阵计算-CSDN博客 行列式计算 参考链接:实用的行列式计算方法 —— 线性代数(det)_det线性代数-CSDN博客 参考链接:行列式的计算方法(含四种,…...
《Techporters架构搭建》-Day01 第一个RESTful API接口
微服务架构搭建 搭建微服务架构分析一下项目的build.gradle添加Demo接口 搭建微服务架构 首先搭建系统管理模块,模块结构如下 tps-cloud └── tps-system -- 系统管理模块└── tps-system-api -- 系统管理模块公共api模块└── tps-system-biz -- 系统管理模…...
【C++ —— AVL树】
C —— AVL树 AVL树的概念AVL树节点的定义AVL树的插入向上调整旋转左单旋右单旋左右双旋右左双旋 AVL树的高度AVL树的验证总结:代码 AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素…...
跨平台webSocket模块设计技术解决方案
1. 概述 目标:设计并实现一个能够在多种操作系统上运行的WebSocket通讯模块,支持与前端浏览器和HTTPS服务端进行数据交换。技术栈:C11 ,使用跨平台库如 Boost处理网络IO,使用 JSON 库如 nlohmann/json 解析消息。 2.…...
Drools规则引擎
一、Drools规则引擎 Drools官网: https://www.drools.org/Drools中文网: http://www.drools.org.cn/bilibili学习视频(黑马博学谷2020年最新Java项目Drools业务规则管理系统(BRMS)): https://www.bilibili.com/video/BV1Pa4y1a7u…...
vue学习day11-路由、路由模块的封装、声明式导航-路由的介绍、VueRouter、router-link、自定义高亮类名
32、路由 (1)路由的介绍 1)生活中的路由:设备和ip的映射关系 2)路由:一种映射关系 3)Vue中的路由:路径与组件的映射关系 (根据路由就能知道不同的路径,应…...
智慧校园学期基础数据管理
在智慧校园基础数据管理之一的学期管理功能管理中,学期的有序管理具有重要意义。它不仅是教学活动有序开展的指挥棒,更是连接学校管理者、教师与学生之间沟通的桥梁,承载着规划、跟踪与管理学期内各项事务的重要使命。 学期管理功能的首要任务…...
ISP代理和双ISP代理:区别和优势
随着互联网技术的不断发展和普及,网络代理服务成为众多用户保护隐私、提高网络性能、增强安全性的重要工具。其中,ISP代理和双ISP代理是两种常见的网络代理服务形式。本文将详细探讨ISP代理和双ISP代理的区别和优势,以便用户更好地了解并选择…...
【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【22】【RabbitMQ】
持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【22】【RabbitMQ】 Message Queue 消息队列异步处理应用解耦流量控制 消息中间件概念RabbitMQ概念MessagePublisherExchangeQueueBindingConnectionChannelConsumerVirtual HostBroker图…...
概率论原理精解【4】
文章目录 度量空间概述理论基础定义特点高级概念广泛应用 性质例子应用 柯西数列柯西数列的定义柯西数列的例子 参考文献 度量空间 概述 设 f : R n → R m , f ˙ ( x ) 在 { x : ∣ x − x 0 ∣ < r } 内连续,则当 ∣ t ∣ < r 时, f:R^n\righ…...
Linux云计算 |【第一阶段】ENGINEER-DAY3
主要内容: LVM逻辑卷管理、VDO、RAID磁盘阵列、进程管理 一、新建逻辑卷 1、什么是逻辑卷 逻辑卷(Logical Volume)是逻辑卷管理(Logical Volume Management,LVM)系统中的一个概念。LVM是一种用于磁盘管理…...
springboot 实体类加注解校验入参数据
导入的是springboot自身的依赖包 import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid;...
做棋牌网站要什么源码/做电商如何起步
int ChangeNum(char* str) { char revstr[16]{0}; //根据十六进制字符串的长度,这里注意数组不要越界 int num[16]{0}; int count1; int result0; int length; length strlen(str); memcpy(revstr,"0x",2); memcpy(revstr 2,str,length); length …...
wordpress教程阿里云/优化师培训机构
虽然人工智能威胁论层出不穷,但这并不能阻止AI逐渐渗透进我们生活的各个方面,通过算法交易的股票市场、进入最终测试阶段的无人驾驶汽车、启用FaceID的iPhoneX… 广告行业自然也不例外,在过去的几年中,我们已经看到了被程序化交易…...
wordpress 百度优化/环球网
https://github.com/starrtc/android-demo 围城(爱熄灭了灯,心围一座城。出版七十周年纪念版) (钱钟书) - 您在位置 #49-49的标注 | 添加于 2018年9月16日星期日 上午7:58:57 忧世伤生, 围城(爱熄灭了灯,…...
h5网站做微信公众号/网络推广和seo
本文实例讲述了JS打开新窗口防止被浏览器阻止的方法。分享给大家供大家参考。具体分析如下:用传统的window.open()方式打开新窗口,会被浏览器阻止,那么,我们如何才能让JS打开新窗口不被浏览器阻止呢?其实办法还是有的&…...
厦门网站建设外包维护/百度云资源共享
2019独角兽企业重金招聘Python工程师标准>>> 准备工作3个虚拟机节点的构成如下 :安装步骤操作过程1、安装包已经上传至其中1个节点。 2、解压缩安装包 命令:unzip rocketmq-all-4.0.0-incubating-bin-release.zip 解压缩之后如下:…...
做网站要注意哪一点/域名权重查询工具
卫星通信自20世纪60年代出现以来,在全球通信领域扮演着重要的角色。而随着因特网旋风的出现,卫星通信与因特网相结合的卫星因特网技术成为卫星通信发展中的新热点。 卫星因特网技术近期得到了快速发展,卫星已成为因特网连接的一个重要组成部…...