线性表3:单向循环链表

线性表 一、相关术语   线性表、直接前驱、直接后继、顺序表、链表、指针、指针变量 、结点、数据域、   单向链表、单向循环链表、双向循环链表、插入、删除   二、线性表的定义及特点   线性表(linear_list)是属于同一个数据对象的数据元素的有限序列。通常表示为:          (a1, a2 ,a3,…,an)   其中n为线性表的长度,当n=0时,表示一个空表。   线 阅读详情

链式存储结构【单向循环链表】的基本操作slink


下面介绍链式存储结构的单向循环链表。

循环链表的特点

循环链表是另一种形式的链式存储结构。其特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。
由此,从表中任一结点出发均可找到表中其他结点。

循环链表的描述

描述: 数据域+指针域

typedef int datatype;

typedef struct node {
	datatype data;//数据域
	struct node * next;//保存下一个数据的地址
}slinklist, *slinklist_t;

基本操作

创建空链表

用malloc动态申请空间
在这里插入图片描述

slinklist_t createSlinkList()
{
	slinklist_t H = (slinklist_t)malloc(sizeof(slinklist));
	if(NULL == H)
	{
		printf("malloc Head node fail\n");
		return NULL;
	}

	H->data = -1;
	H->next = H;	//只有头结点,自身构成循环

	return H;
}

插入:尾插

使用尾插法插入元素
在这里插入图片描述

int insertSlinkList(slinklist_t H, datatype x)
{
	slinklist_t pnew = NULL, r = NULL;

	//1.封装新结点
	pnew = (slinklist_t)malloc(sizeof(slinklist));
	if(NULL == pnew)
	{
		printf("insert:malloc pnew node fail\n");
		return -1;
	}
	
	//2.找尾巴
	r =  H;
	while(r->next != H)
		r = r->next;

	//3.接入新结点
	pnew->data = x;
	pnew->next = H;
	r->next = pnew;

	return 0;
}

输出链表

void showSlinkList(slinklist_t H)
{
	slinklist_t p = H->next;
	while(p->next != H)
	{
		printf("%d ", p->data);
		p = p->next;
	}
	printf("%d\n", p->data);
}

单向循环链表操作与单链表大同小异。

测试

	//1.创建一个空的单向循环链表
	slinklist_t H = createSlinkList();
	if(NULL == H)
	{
		printf("create Slinklist failed\n");
		return -1;
	}

	//2.向表中增加数据
	insertSlinkList(H, 10);
	insertSlinkList(H, 11);
	insertSlinkList(H, 99);
	insertSlinkList(H, 1);
	insertSlinkList(H, 12);

	//3.打印输出
	showSlinkList(H);
WRF中使用ERA5再分析数据    本人在做一些实例时,需要用到最新的ERA5再分析数据集,其中我下载的是ERA5 hourly data on pressure levels form 1979 to present和ERA5 hourly data on single levels from 1979 to present中的3天数据。 1、注册climate copernicus账号 下载ERA5数据前先要注册其账号 2、选择变量    WRF中对于气象数据的字段有具体的要求, ...... 阅读详情

相关推荐

Cadence仿真数字电路功耗

Cadence仿真数字电路功耗 数字电路的功耗采用平均电流乘电源电压获得,所以本文的关键是测量平均电流。 仿真前设置好仿真参数后,在仿真的ADE街边选择:outputs➡to be saved➡select on design 选择电源的负端电流(若选择正端,则电流为负): 选择完成后,在ADE界面讲所选节点的plot也勾选上,点击run。仿真完成后自动显示波形。在波形上选中该电流曲线,右击选择:send to➡calculator 注意上图中,商店前的波形不稳定,需要进行截取。在calculator

qq_41519780的博客 1万+

数据结构 2(单向循环列表)

单向循环链表: 1.这个单向循环链表,就是在单向链表的基础上,把首尾给连起来,他就是循环链表了。 2.在单向链表中,头指针是相当重要的,因为单向链表的操作都需要头指针,所以如果头指针丢失或者破坏,那么整个链表都会遗失,并且浪费链表内存空间。 单向循环链表的构成: 如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表。 单向循环链表结构就是链表的最后一个指针...

weixin_45333967的博客 590

保姆级教程:在RK3588 Android12设备树(DTS)中配置MIPI 8 Lane双通道与DSC显示

本文详细介绍了在RK3588 Android12平台上配置MIPI 8 Lane双通道与DSC显示的实战指南。通过设备树(DTS)参数详解、DSC参数计算与PPS配置、双通道同步机制实现等内容,帮助开发者高效完成高分辨率屏幕驱动配置,解决嵌入式显示系统开发中的常见挑战。

weixin_30905133的博客 399

3 循环链表和双向链表介绍

一些常用的链表结构 循环链表 特点:表中最后一个结点的指针域指向头结点,整个链表形成一个环。 循环链表的操作和单链表基本一致,差别仅在于终止条件不同。 在单链表中,判别条件为p!=NULL或p->next!=NULL,而循环单链表的判别条件为p!=L或p->next!=L。 双向链表 特点:克服单链表单向性的缺点。 #include<iostream> using namespace std; typedef int ElemType; typedef struct DuLN

xuhuimingc的博客 230

微信H5网页授权通用方案:中转页破解域名限制,适配Hash/History路由

在Web开发中,OAuth 2.0授权码模式是实现第三方登录的通用标准,其核心原理是通过授权服务器颁发临时代码,再由客户端交换访问令牌。这一机制在微信公众号H5开发中尤为重要,用于安全获取用户身份。然而,微信平台对网页授权回调域名有严格的数量限制,这成为多子域名、多环境及微前端架构下业务扩展的主要瓶颈。其技术价值在于通过设计一个统一的中转授权页,将授权逻辑与业务逻辑解耦,让所有业务页面共享一个已配置的授权入口,从而突破域名配额限制。该方案的关键在于适配不同的前端路由模式,需精准处理Hash模式与Histor

weixin_42533120的博客 318

麒麟OS(Kylin OS)操作系统minikube+docker安装使用及遇到的问题

一 ,安装minikube及操作工具kubectl 1,安装kubectl 使用以下命令下载最新版本: curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" 要下载指定版本(例如v1.22.0版本) ,请键入: curl -LO https://dl.k8s.io/release/v1.22.0/bin/linux/amd..

qq_23396017的博客 2643

在单链表写入一组数据代码_数据结构与算法之单循环链表

一、单循环链表1.回顾单链表单链表,由于每个结点只存储了向后的指针,到了尾部标识就停止了向后链的操作。也就是说,按照这样的方式,只能索引后继结点不能索引前驱结点。单链表的问题:如果不从头结点出发,就无法访问全部结点解决方法:只需要将单链表中的终端结点的指针由空指针改为指向头结点2.单循环链表将单链表的终端结点的指针由原来的空指针改为指向头结点,就是整个单链表形成一个环,这种头尾相接的单链表称为单循...

weixin_34171095的博客 346

红外气体检测方案解析:从NDIR原理到物联网终端设计实践

气体检测是工业安全与环境监测的核心需求,其技术原理主要基于气体分子对特定物理或化学信号的响应。非色散红外(NDIR)技术作为一种物理检测方法,通过测量气体分子对特定波长红外光的吸收来定量浓度,因其不依赖化学反应,具备寿命长、抗干扰强和响应快等优势。在工程实践中,红外气体检测方案的价值在于为物联网终端设备提供了高可靠、低功耗的感知能力,广泛应用于工业过程监控、环境空气质量监测以及智能家居安全预警等场景。本文以一套集成了Microchip MCU、Axetris红外光源和Pyreos热释电传感器的参考设计为例,

weixin_30954817的博客 395

【2.4】单向循环链表

一、单向循环链表结构特点。1、所有元素依次衔接,尾部元素链接到首元素。2、适用于环形结构处理的场合。3、便于特定步长循环遍历链表元素。二、单向循环链表的基本结构图。上图分别表示不带头结点和带头结点的单向循环链表。3、文件组织方式4、代码实现文件一:circular_list.h单向循环链表的函数定义#ifndef _YE_LELE_01 #define _YE_LELE_01 typede...

yeler082的博客 1860

BMW Trojan 样本分析

仅用于链接已经删却但是需要方便查阅的原文http://blog.youkuaiyun.com/zirconsdu/article/details/7997470 转载请注明出处http://blog.youkuaiyun.com/zirconsdu/article/details/8153813。 一些具体数据结构和具体路径隐去。   BMW木马样本分析 摘要 2011年底和某Hunter的谈话涉及到当时新检

zirconsdu的专栏 3911

http协议

HTTP 协议由起始行、头部、空行、消息体组成。

qq_34059233的博客 91

单向循环链表

单向循环链表 class Node: def __init__(self, item): self.item = item self.next = None self.prev = None class CycleLink: def __init__(self): self.head = None def...

qq_30505673的博客 304

Python全栈入门到实战【基础篇 22】生成器与迭代器:底层逻辑与实战场景

Python迭代器与生成器:惰性求值的高效实践 摘要:本文深入解析Python中迭代器和生成器的核心机制与应用场景。迭代器通过实现__iter__()和__next__()方法实现惰性求值,适合处理大数据集和无限序列。生成器作为迭代器的简化实现,通过yield关键字自动实现迭代器协议,代码更简洁。文章详细对比了可迭代对象与迭代器的区别,演示了自定义迭代器和生成器函数的实现方式,并介绍了生成器表达式这一高效替代列表推导式的方案。通过斐波那契数列等实例,展示了惰性求值在内存优化方面的优势,以及生成器在流式数据处

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 3263

数据结构四:线性表之带头结点的单向循环链表的设计

单向循环链表的插入,删除算法与单链表基本一致,所不同的是若操作在链表的尾部进行,则判断条件发生变化不同,以让单链表继续保持循环的性质。因此,需要记住循环链表判空和判断是否为尾巴结点的条件!即循环链表中没有NULL指针。涉及遍历操作时,其终止条件就不再是像非循环链表那样判别p或p->next是否为空,而是判别它们是否等于某一指定指针,如头指针或尾指针等。

weixin_47040031的博客 2821

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Algorithms_基础数据结构(04)_线性表之链表_单向循环链表&约瑟夫环问题

文章目录大纲图链表的经典面试题目如何设计一个LRU缓存淘汰算法约瑟夫问题 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 tip:单向链表 约瑟夫问题 N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。 举个例子: 假设N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。 现在问你最后留下的人是谁? 比如N=6,M=5 ,留下的就是1 1 ...

小工匠 2万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

线性表-单向循环链表

将单链表中终端结点的指针端由空指针改为头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list)。

君上的博客 256

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

线性表中的单向循环链表与栈

1. 元素进栈和出栈的操作只能从一端完成,另一端是封闭的2. 栈中无论存数据还是取数据,都必须遵循“先进后出”的原则,即最先入栈的元素最后出栈。以图1的栈为例,很容易可以看出是元素1最先入栈,然后依次是元素2、3、4入栈。在此基础上,如果想取出元素1,根据“先进后出”的原则,必须先依次将元素4、3、2 出栈,最后才轮到元素1出栈。栈是只能在一端进行插入和删除操作的线性表(又称为堆栈),进行插入和删除操作的一端称为栈顶,另一端称为栈底。特点:栈是先进后出FILO(First In Last Out)

qq_63858767的博客 501

【数据结构算法】②、单向循环链表的创建插入删除实现、单向循环链表的初始化、遍历、插入(首元结点、其他结点情况)、删除元素、查询元素

【数据结构算法】②、单向循环链表的创建插入删除实现、单向循环链表的初始化、遍历、插入(首元结点、其他结点情况)、删除元素、查询元素

慢慢来就很快。 2758

数据结构中之单向循环链表的使用

单向链表是

MrRender 2064

线性表的链式存储-单向循环链表,认识的前进上升

一、链表的再认识(带起源结点) 1.起源结点 首结点的前驱结点即为起源结点,起源结点出现的目的是为了更方便地操作链表,其数据域可用来存放有效结点长度。 从我个人的角度出发,起源结点是链表的发源地,是链表生命的开始,孕育了链表后续的一切,是链表有效结点之母、之父,见证了链表全面的、联系的、运动的、有矛盾的、从无到有的变化过程。万分悲痛的是,它是无性繁殖,且每个后代只能生育一个后代。 什么鬼东西?胡说八道! 通俗来讲,链表的一切操作都要从起源结点出发,通过起源结点方可追踪到链表后续所有的有效结点。 2.起源指针

yjhqukq的博客 375

【数据结构】链表(1):单向链表和单向循环链表

将线性表中各元素分布在存储器的不同存储块,称为结点。通过指针或地址建立起它们之间的联系,所得到的存储结构就是链表。链表都有一个头结点(一般不保存数据,不做遍历),是链表的入口。链表呈现一对一关系,且有一个前驱结点和一个后继结点。每一个结点都往堆申请了地址,由多个堆组成。

猫猫的小茶馆 1531

数据结构——第二章 线性表(4)——单向循环链表

单向链表中的最后一个节点指针域为空,如果查找当前位置的前驱结点,必须回到链表头,重新扫描。如果用最后一个结点的指针域记住头结点,则链表上的结点可以循环使用,这种链表称为单向循环链表。常用的单向循环链表有两种:一种是带头指针的单向循环链表,另一种是带尾指针的循环链表。带头指针和头结点的单向循环链表中L记的是头结点,尾结点的指针域记的也是头结点,尾结点必须通过循环才能找到。判断链表是否为空的条件是L->next==L为真。

zxj20041003的博客 741

数据结构与算法(二):线性表

上一篇《数据结构与算法(一):概述》中介绍了数据结构的一些基本概念,并分别举例说明了算法的时间复杂度和空间复杂度的求解方法。这一篇主要介绍线性表。

Java+GO+JS全栈工程师-鹤冲天的博客:编程辅导~商务合作~技术交流 2073

数据结构实验二: 线性表之应用

本关任务要求针对顺序存储的线性表完成三个操作函数,分别实现线性表中数据的插入、删除与查找等功能。线性表是最基本、最简单、也是最常用的一种数据结构。线性表结构中,数据元素之间通过一对一首尾相接的方式连接起来。具体实现时,线性表可以采用不同的存储策略。下面给出了一种基于顺序存储的线性表实现方案:该方案将线性表存储在一片连续空间里,并通过data、len和max三个属性元素。组织成为一个结构:data: 给出线性表存储空间的起始地址max: 指明线性表存储空间最多可存储的数据元素个数。

2301_80249313的博客 1448

数据结构和算法(二)单向循环链表的创建插入删除实现

数据结构和算法(二)单向循环链表的创建插入删除实现

kyl282889543的博客 2684
上一篇: 线性表2:链表的基本操作
下一篇: 线性表4:双向循环链表
hellohelloe
博客等级 码龄8年 18粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值