ESP-IDF:基于企业链表实现的循环链表实例,实现了初始,插入,循环打印的功能

news2024/11/26 20:24:10

例程:

/* circle链表基于企业链表*/
// 链表节点
typedef struct CIRCLENODE
{
CIRCLENODE *next;
} circleNode;

typedef struct CIRCLELIST
{
circleNode head;
int size;
} circleList;

circleList *Inital_CircleList()
{
circleList *cp = (circleList *)malloc(sizeof(circleList));
cp->head.next = &(cp->head); // 循环链表,首节点指向它自己
cp->size = 0;
return cp;
}

void freeSpace_CircleList(circleList *cp)
{
if (cp == NULL)
{
return;
}
cp->head.next = NULL; // 其它节点都在用户空间分配和释放,这里只释放头节点即可
free(cp);
}

void insert_circleList(circleList *cp, circleNode *np, int pos)
{
if (cp == NULL)
{
return;
}
if (np == NULL)
{
return;
}
if (pos < 0 || pos > cp->size)
{
pos = 0; // 友好判断,如果超出pos超出范围,把数插入到第一个节点前
}
circleNode *pCurrent = &(cp->head);
for (int i = 0; i < pos; i++)
{
pCurrent = pCurrent->next;
}
np->next = pCurrent->next; // 把pCurrent的下一个节点的地址赋值给新节点
pCurrent->next = np; // pCurrent指向新节点
cp->size++;
}

typedef struct PERSON10
{
circleNode *next;
string name;
int age;
} person10;

typedef void (*PRINT10)(circleNode *);
void print10(circleNode *pp)
{
person10 *p1 = (person10 *)pp; // 将pp强转为person10类型,就可以访问这个节点里面的name和age了
cout << “姓名:” << p1->name << " 年龄:" << p1->age << endl;
}
void print_circleList(circleList *cp, PRINT10 printp)
{
if (cp == NULL)
{
return;
}
circleNode *pCurrent = cp->head.next; // 头节点没有有效数据,从下一节点开始打印
for (int i = 0; i < (cp->size *2); i++) //循环打印两遍
{
if (i == cp->size)
{
pCurrent = pCurrent->next;
cout << “-------------” << endl;
}
printp(pCurrent);

    pCurrent = pCurrent->next;
}

}

void test10()
{
person10 p1, p2, p3, p4, p5;
p1.name = “aaa”;
p2.name = “bbb”;
p3.name = “ccc”;
p4.name = “ddd”;
p5.name = “eee”;

p1.age = 10;
p2.age = 11;
p3.age = 12;
p4.age = 13;
p5.age = 14;

circleList *list10 = Inital_CircleList();
insert_circleList(list10,(circleNode *)&p1,0);
insert_circleList(list10,(circleNode *)&p2,0);
insert_circleList(list10,(circleNode *)&p3,0);
insert_circleList(list10,(circleNode *)&p4,0);
insert_circleList(list10,(circleNode *)&p5,0);

print_circleList(list10,print10);

}

extern “C” void app_main(void)
{
test10();
}

结果:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeakCanary简要原理

首先需要知道ReferenceQueue&#xff08;引用队列&#xff09;&#xff1a;public static void main(String[] args) {Activity activity new Activity(); // 模拟ActivityReferenceQueue<Activity> queue new ReferenceQueue<>(); // 引用队列WeakReference<…

从汇编的角度了解C++原理——new和malloc的区别

文章目录1、new和malloc的区别1.1、例程1.2、总结本文用到的反汇编工具是objconv&#xff0c;使用方法可以看我另一篇文章https://blog.csdn.net/weixin_45001971/article/details/128660642。 其它文章&#xff1a; 从汇编的角度了解C原理——类的储存结构和函数调用 从汇编的…

【索引】引用A survey on pickup and delivery problems的文章

1. Dynamic container drayage with uncertain request arrival times and service time windows⭐️ 具有不确定请求到达时间和服务时间窗口的动态集装箱运输 Container drayage plays a critical role in intermodal global container transportation, as it accomplishes th…

hud 1846巴什博弈(简单的解法 或 Sprague-Grundy解法)

各位勇敢者要玩的第一个游戏是什么呢&#xff1f;很简单&#xff0c;它是这样定义的&#xff1a; 1、 本游戏是一个二人游戏; 2、 有一堆石子一共有n个&#xff1b; 3、 两人轮流进行; 4、 每走一步可以取走1…m个石子&#xff1b; 5、 最先取光石子的一方为胜&#xff1b; 如…

不懂Token,就是别说自己是中级测试工程师

官方回答&#xff1a; Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证&#xff0c;服务端认证成功&#xff0c;那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位。 基于工程师的理解&#xff1a; token就相当于客户…

Go语言初始

"当我回头&#xff0c;妄想找到幸福的线索&#xff0c;那束光拉长我的影子&#xff0c;逃离我。"一、Go简介Go&#xff08;又称 Golang&#xff09;是 Google 的 Robert Griesemer&#xff0c;Rob Pike 及 Ken Thompson 开发的一种静态强乐西、编译型语言。Go 语言语…

Unicorn反混淆:恢复被OLLVM保护的程序(一)

一、目标 现在很多程序利用ollvm的控制流平坦化来增加逆向分析的难度。 控制流平坦化 (control flow flattening)的基本思想主要是通过一个主分发器来控制程序基本块的执行流程&#xff0c;例如下图是正常的执行流程 1:show1 经过控制流平坦化后的执行流程就如下图: 1:show2 …

RT-Thread系列--启动过程

一、目的RT-Thread是一个小而美的RTOS&#xff0c;所有的RTOS的都有一个特点&#xff0c;那就是存在调度器&#xff0c;像RT-Thread的调度器是一个实时抢占式调度器&#xff08;同优先级任务使用时间片调度方式&#xff09;。本篇不讲调度器相关的内容&#xff0c;着重讲解调度…

【博客591】LVS的DR和NAT模式下要注意的缺陷

LVS的DR和NAT模式下要注意的缺陷 1、DR模式和NAT模式的转发原理 2、LVS的DR和NAT模式下要注意的缺陷 缺陷1&#xff1a;DR模式下的realserver和 lvs的vip提供服务的端口必须一致。 例如vip的端口对外端口为 80&#xff0c;但后端服务的真实端口为8080&#xff0c;通过lvs的D…

SpringBoot快速上手

SpringBoot 概述 Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序&#xff0c;您可以“直接运行”。 特征 创建独立的 Spring 应用程序 直接嵌入Tomcat&#xff0c;Jetty或Undertow&#xff08;无需部署WAR文件&#xff09; 提供固执己见的“入门”依赖项…

初始C语言 - 函数(2)

目录 1.函数的嵌套调用和链式访问 1&#xff09;函数嵌套调用 2&#xff09;函数的链式访问 - 函数的返回值作为另一个函数的参数 2. 函数的声明和定义 1&#xff09;变量的声明和定义 2&#xff09;函数的声明和定义 //函数必须先声明后使用//函数的声明写在头文件里 3.…

集成学习、Bagging集成原理、随机森林构造过程、随机森林api与案例、boosting集成原理、梯度提升决策树(GBDT)、XGBoost与泰勒展开式

一、集成学习 集成学习&#xff1a;通过建立几个模型来解决单一预测问题&#xff0c;工作原理是生成多个分类器/模型&#xff0c;各自独立地学习和作出预测。这些预测最后结合成组合预测&#xff0c;因此优于任何一个单分类的做出预测 机器学习的两个核心任务 集成学习中boost…

【UE4 第一人称射击游戏】51-制作手榴弹

上一篇&#xff1a;【UE4 第一人称射击游戏】50-用另一种方法实现僵尸随机漫游 僵尸攻击玩家时造成伤害本篇效果&#xff1a;按G键投掷出手榴弹&#xff0c;产生爆炸效果步骤&#xff1a;新建一个蓝图类&#xff08;父类为Actor&#xff09;&#xff0c;命名为“GrenadeActor”…

水声功率放大器模块在圆柱壳结构声源辐射研究中的应用

客户需求&#xff1a;实验需要在消声水池中对圆柱壳声源振动和远场声压进行实验测量&#xff0c;圆柱壳内部尺寸为&#xff1a;高0.5m(不含盖板)&#xff0c;壳外径0.5&#xff0c;内径0.497m&#xff0c;上下盖板高0.014m&#xff0c;所以对圆柱壳内功率放大模块的尺寸以及供电…

Qt图表操作(QCustomPlot 与 QtCharts的介绍与使用)

一、QCustomPlot简介 QCustomPlot是QT下一个方便易用的绘图工具&#xff0c;该绘图库专注于制作美观&#xff0c;出版品质的2D图表&#xff0c;图表和图表&#xff0c;以及为实时可视化应用程序提供高性能。它可以导出为各种格式&#xff0c;如矢量化的PDF文件和光栅化图像&…

Task12 数据缘何而来数据格式

目录1 常见的格式1.1 Excel文件的格式1.2 Excel数据的格式1.3 基本知识2 Excel数据格式2.1 数据类型转换3 练习1 常见的格式 1.1 Excel文件的格式 Excel文件的常见格式&#xff1a;.xls和.xlsx 1.2 Excel数据的格式 Excel数据的存储不同格式&#xff1a;xlsx、csv、txt cs…

mysql快速生成100W条测试数据(8)全球各城市人口及经济增长速度并存入mysql数据库

这是之前的文章里面包含一些以前的一些操作流程可以进行参考学习 更加详细操作步骤在第一篇文章里面 mysql快速生成100W条测试数据&#xff08;1&#xff09;&#xff1a;游戏人物数据 mysql快速生成100W条测试数据&#xff08;2&#xff09;公司员工信息 mysql快速生成100W条测…

本地挂载网盘_Alist_RaiDrive_windows

目录 一、下载安装Alist 二、启动登录Alist 三、挂载网盘 四、挂载到本地 五、开机自启动 一、下载安装Alist 安装地址&#xff1a;https://github.com/alist-org/alist 二、启动登录Alist 1.打开alist.exe所在目录&#xff0c;输入cmd 2.利用cmd&#xff0c;输入alist …

[oeasy]python0051_ 转义_escape_字符_character_单引号_双引号_反引号_ 退格键

转义字符 回忆上次内容 上次研究的是进制转化10进制可以转化为其他形式 binocthex 其他进制也可以转化为10进制 int可以设置base来决定转为多少进制 回忆一下 我们为什么会有八进制&#xff1f;因为需要用八进制输出转义字符 \ooo 把(ooo)8进制对应的ascii字符输出 就如同 \…

QMAKE_POST_LINK QMAKE_PRE_LINK解释

命令解释 QMAKE_POST_LINK是在可执行程序链接后执行它的命令 QMAKE_PRE_LINK是在可执行程序链接前执行它的命令 注意C/C程序是先编译后链接 如果你需要一个编译前执行的命令可以使用 copy_files.files $$filelist copy_files.path $$OUT_PWD COPIES copy_files即使是编…