数据结构 2.2 单循环链表
2.单循环链表
data|next——>data|next——>data|next——>头节点
1.初始化链表
2.增加节点(头插法、尾插法)
3.删除节点
4.遍历链表
定义一个结构体,存放data域和指针域:
typedef struct Node {//定义一个结构体,存放data域和指针域int data;//数据域类型struct Node* next;
}Node;
初始化链表:
Node* initList() {//初始化链表Node* L = (Node*)malloc(sizeof(Node));L->data = 0;L->next = L;return L;
}
头插法:
void headInsert(Node* L, int data) {//头插法Node* node = (Node*)malloc(sizeof(Node));node->data = data;node->next = L->next;L->next = node;
}
尾插法 :
void tailInsert(Node* L, int data) {//尾插法Node* n = L;Node* node = (Node*)malloc(sizeof(Node));node->data = data;while (n->next != L) {n = n->next;}node->next = L;n->next = node;
}
删除:
int Delete(Node* L, int data)//删除
{Node* preNode = L;Node* node = L->next;while (node != L){if (node->data == data) {//deletepreNode->next = node->next;free(node);return true;}preNode = node;node = node->next;}return false;
}
遍历链表:
void printList(Node* L) {//遍历链表Node* node = L->next;while (node != L) {printf("%d->", node->data);node = node->next;}printf("NULL\n");
}
main函数:
int main()
{Node* L = initList();headInsert(L, 1);headInsert(L, 2);headInsert(L, 3);headInsert(L, 4);headInsert(L, 5);tailInsert(L, 6);tailInsert(L, 7);tailInsert(L, 8);tailInsert(L, 9);tailInsert(L, 10);printList(L);Delete(L, 4);Delete(L, 5);printList(L);return 0;
}
单循环链表函数
typedef struct Node {//定义一个结构体,存放data域和指针域int data;//数据域类型struct Node* next;
}Node;Node* initList() {//初始化链表Node* L = (Node*)malloc(sizeof(Node));L->data = 0;L->next = L;return L;
}void headInsert(Node* L, int data) {//头插法Node* node = (Node*)malloc(sizeof(Node));node->data = data;node->next = L->next;L->next = node;
}void tailInsert(Node* L, int data) {//尾插法Node* n = L;Node* node = (Node*)malloc(sizeof(Node));node->data = data;while (n->next != L) {n = n->next;}node->next = L;n->next = node;
}int Delete(Node* L, int data)//删除
{Node* preNode = L;Node* node = L->next;while (node != L){if (node->data == data) {//deletepreNode->next = node->next;free(node);return true;}preNode = node;node = node->next;}return false;
}void printList(Node* L) {//遍历链表Node* node = L->next;while (node != L) {printf("%d->", node->data);node = node->next;}printf("NULL\n");
}int main()
{Node* L = initList();headInsert(L, 1);headInsert(L, 2);headInsert(L, 3);headInsert(L, 4);headInsert(L, 5);tailInsert(L, 6);tailInsert(L, 7);tailInsert(L, 8);tailInsert(L, 9);tailInsert(L, 10);printList(L);Delete(L, 4);Delete(L, 5);printList(L);return 0;
}
相关文章:
数据结构 2.2 单循环链表
2.单循环链表 data|next——>data|next——>data|next——>头节点 1.初始化链表 2.增加节点(头插法、尾插法) 3.删除节点 4.遍历链表 定义一个结构体,存放data域和指针域: typedef struct Node {//定义一个结构体&…...
矩阵距离——多源BFS
给定一个 N 行 M 列的 01 矩阵 A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])|i−k||j−l| 输出一个 N 行 M 列的整数矩阵 B,其中:B[i][j]min1≤x≤N,1≤y≤M,A[x][y]1dist(A[i][j],A[x][y]) 输入格式 第…...
关于在 Notion 中使用 Markdown 语法
关于在 Notion 中使用 Markdown 语法 习惯使用的 Markdown 的伙伴们应该知道,当需要加粗字体时,会首先输入 ** **,然后在里面填内容。 但是在 Notion 中,这个就不太行了。它所定义的规则是从前往后,也就是先键入**&…...
sigmoid和softmax函数有什么区别
Sigmoid函数和Softmax函数都是常用的激活函数,但它们的主要区别在于应用场景和输出结果的性质。 Sigmoid函数(也称为 Logistic函数): Sigmoid函数将输入值映射到0到1之间的连续实数范围,通常用于二元分类问题。 Si…...
第五章:最新版零基础学习 PYTHON 教程—Python 字符串操作指南(第七节 - Python 中使用 % 进行字符串格式化)
在Python中,可以通过不同的方法来实现对字符串所需的格式化。他们之中有一些是; 1) 使用 % 2) 使用 {} 3)使用模板字符串本文讨论使用 % 进行格式化。使用 % 的格式类似于 C 编程语言中的“printf”。%d – 整数 %f – 浮点数 %s – 字符串 %x – 十六进制 %o – 八进制 下面的…...
【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)
一,VMware下载地址: 百度网盘链接链接:百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https:/…...
Eclipse MAT解析headp dump,total size小于file size
1. 问题描述 使用Eclipse MAT分析20GB的heap dump文件 最后解析出来dump size只有1GB 2. 原因:heap dump中包含许多unreachable objects Eclipse MAT的官方文档,《Basic Tutorial》章节,有对上图的Overview page做介绍 针对total size小…...
【数据挖掘】2022年 Quiz 1-3 整理 带答案
目录 Quiz 1Quiz 2Quiz 3Quiz 1 Problem 1 (50%). Consider the set of training data shown below. Here, A, B, C C C are attributes, and D D...
AcWing 288. 休息时间,《算法竞赛进阶指南》,环形与后效性处理
288. 休息时间 - AcWing题库 在某个星球上,一天由 N 个小时构成,我们称 0 点到 1 点为第 1 个小时、1 点到 2 点为第 2 个小时,以此类推。 在第 i 个小时睡觉能够恢复 Ui 点体力。 在这个星球上住着一头牛,它每天要休息 B 个小…...
一文掌握Linux系统信息查看命令(CPU、内存、进程、网口、磁盘、硬件)
引言 大家好,欢迎来到我的技术博客!如果你是一名Linux系统管理员、开发者或者热衷于学习Linux系统的用户,那么你一定需要掌握查看系统信息的命令。在这篇博客中,我将为你介绍一些常用的Linux命令,帮助你快速了解和监控…...
UE5.1编辑器拓展【三、脚本化资产行为,删除无引用资产】
目录 需要考虑的问题 重定向的修复函数 代码: 删除无引用资产 代码 需要添加的头文件和模块 在我们删除资产的时候,会发现,有些资产在删除的时候会出现有被什么什么引用,还有的是没有被引用。 而我们如果直接选择一片去进行…...
防抖和节流的实现
防抖和节流的实现 什么是防抖和节流实现防抖和节流防抖节流 防抖和节流的应用场景 什么是防抖和节流 防抖和节流是前端开发中常用的两种性能优化技术。 为什么需要防抖和节流呢? 两者目的都是为了防止某个时间段内操作频繁触发,造成性能消耗。 防抖&…...
alsa pcm接口之阻塞和非阻塞打开和异步通知模式
阻塞和非阻塞打开(Blocked and non-blocked open) 当设备打开在一个阻塞或非阻塞模式,ALSA pcm api接口使用不同的行为,模式可以指定通过mode参数通过snd_pcm_open函数,blocked mode阻塞模式是默认打开方式,在这个模式下,行为表现为当资源被其他应用程序使用,应该阻…...
Python Random模块详解
Random模块详解 随机数 random模块 randint(a, b) 返回[a, b]之间的整数randrange ([start,] stop [,step]) 从指定范围内,按指定基数递增的集合中获取一个随机数,基数 缺省值为1。random.randrange(1,7,2)choice(seq) 从非空序列的元素中随机挑选一个…...
Vue3 模糊搜索筛选
Vue3 模糊搜索筛选 环境: vue3 tselement plus 目标: 输入框输入内容,对展示的列表进行模糊搜索筛选匹配的内容。 代码如下: <div style"margin-top: 50px"><el-input v-model"valueInput" size&…...
【MVC】C# MVC基础知识点、原理以及容器和管道
给自己一个目标,然后坚持一段时间,总会有收获和感悟! 国庆假期马上结束,闲暇时间,重温一遍C#关于MVC的技术,控制器、视图、模型,知识点和原理,小伙伴们还记得吗 目录 一、MVC知识点1…...
【kubernetes】基于prometheus的监控
目录 1 监控解决方案2 prometheus2.1 容器监控2.2 节点监控2.3 资源对象监控2.4 metrics--server 3 prometheus-operator vs kube-prometheus vs helm3.1 prometheus-operator3.2 kube-prometheus3.3 helm 参考文档 1 监控解决方案 从实现方案来说,监控分为3个部分…...
Gmail 将停止支持基本 HTML 视图
根据 Google 支持文档的更新内容,Gmail 将从明年 1 月起停止支持基本 HTML 视图。 ▲ Gmai 基本 HTML 视图界面 目前网页版 Gmail 提供两个界面:基本 HTML 视图和标准视图。停止支持基本 HTML 视图后,当前打开经典模式的基本 HTML 视图模式 …...
电影大师杂记
假期集中刷了好多书,游戏和电影,在虚拟世界里猛烈的各种闲逛,cyberpunk 2077到blade runner,到异形,到终结者,到星球大战&环太平洋,到工业光魔,还有各种编程的书。。。 hmmm&…...
聊聊分布式架构——RPC通信原理
目录 RPC通信的基本原理 RPC结构 手撸简陋版RPC 知识点梳理 1.Socket套接字通信机制 2.通信过程的序列化与反序列化 3.动态代理 4.反射 思维流程梳理 码起来 服务端时序图 服务端—Api与Provider模块 客户端时序图 RPC通信的基本原理 RPC(Remote Proc…...
DeepSeek-OCR 2技术突破:动态视觉token重排效果展示
DeepSeek-OCR 2技术突破:动态视觉token重排效果展示 1. 引言 想象一下,当你阅读一份复杂的学术论文时,眼睛不会机械地从左上角扫到右下角,而是会自然地跳过标题、关注图表、追踪公式推导,甚至在不同的文本栏之间灵活…...
C++ 静态成员的生命周期管理
C静态成员的生命周期管理是面向对象编程中一个既基础又关键的话题。静态成员作为类的特殊成员,其生命周期与普通成员变量截然不同,理解它们的初始化、销毁时机以及线程安全等问题,对于编写健壮高效的C代码至关重要。本文将深入探讨静态成员的…...
2026论文写作工具红黑榜:AI论文工具怎么选?用过才敢说!
2026年论文写作工具红黑榜出炉,千笔AI、ThouPen、豆包位列红榜,适配国内学术规范,提升写作效率;黑榜需避开低质免费工具、无真实引用平台及过度依赖全文生成的工具。选择时可按需求匹配度 - 数据可信度 - 成本承受力三维模型进行评…...
不止于集成:在RuoYi-Camunda流程设计器中实现自定义属性面板与FEEL表达式校验
深度定制RuoYi-Camunda流程设计器:从属性面板扩展到FEEL表达式校验实战 当标准BPMN设计器无法满足复杂业务需求时,定制化开发成为必经之路。某跨国零售企业的审批系统曾因无法在流程节点上定义"区域经理审批阈值"字段,导致每次业务…...
从VCHA移除到成功升级:VMware VCSA6.5到6.7的完整实战记录
从VCHA移除到成功升级:VMware VCSA6.5到6.7的完整实战记录 在虚拟化运维领域,VMware vCenter Server Appliance(VCSA)的升级一直是技术团队面临的常规挑战。当环境配置了vCenter High Availability(VCHA)时…...
安卓逆向实战:用Frida绕过App反调试的5种常见检测(附完整脚本)
安卓逆向工程实战:Frida对抗反调试的深度解决方案 在移动安全研究领域,逆向工程师经常面临各种反调试技术的挑战。当传统的调试工具遭遇精心设计的防护机制时,往往束手无策。本文将深入探讨五种主流反调试检测手段的对抗策略,提供…...
RDK X5上800万像素摄像头延迟从7秒降到200ms:我的5个月踩坑与优化实录
RDK X5高分辨率摄像头优化实战:从7秒延迟到200ms的性能飞跃 深夜的显示器前,我盯着屏幕上缓慢刷新的图像——32642448分辨率下,每按一次快门要等待7秒才能看到结果。作为一名在嵌入式视觉领域摸爬滚打多年的开发者,这种性能表现简…...
Frida启动报错invalid address?手把手教你修复Android逆向工程环境
Frida启动报错invalid address?手把手教你修复Android逆向工程环境 当你满怀期待地启动Frida准备进行Android应用动态分析时,控制台突然抛出"invalid address"错误,那种感觉就像赛车手在起跑线上发现引擎故障。这个看似简单的错误信…...
利用Charles实现请求与响应的动态修改:从基础到实战
1. Charles工具简介与基础配置 Charles是一款功能强大的网络抓包工具,它就像是你手机和电脑之间的"透明玻璃",能让你清清楚楚地看到所有进出的网络请求。我第一次接触Charles是在调试一个电商APP的支付接口时,当时遇到一个诡异的bu…...
终极指南:RealChar语音识别技术深度对比——Whisper、Google Speech与本地部署方案
终极指南:RealChar语音识别技术深度对比——Whisper、Google Speech与本地部署方案 【免费下载链接】RealChar 🎙️🤖Create, Customize and Talk to your AI Character/Companion in Realtime (All in One Codebase!). Have a natural seaml…...
