数据 结构(内核链表)
一、内核链表(是一个有头双向循环链表)
1.内核提供的两个宏
(1) offsetof : 获取结构体成员到结构体开头的偏移量;
(2) contianer_of : 通过偏移量获取结构体首地址;
2.代码示例:
truct passager *create_passager(char *name, int flt_num, int sit_num, char card)
{struct passager *p = malloc(sizeof(struct passager));if (NULL == p){perror("fail malloc");return NULL;}strcpy(p->name, name);p->flt_num = flt_num;p->sit_num = sit_num;p->card = card;return p;
}struct flight *create_flight(int flt_num,char *src,char *dst)
{struct flight *p = malloc(sizeof(struct flight));if(NULL == p){perror("fail malloc\n");return NULL;}p->flt_num = flt_num;strcpy(p->src,src);strcpy(p->dst,dst);return p;
}KLink_t *create_klink()
{KLink_t *pklink = malloc(sizeof(KLink_t));if (NULL == pklink){perror("fail malloc");return NULL;}pklink->phead = NULL;pklink->clen = 0;pthread_mutex_init(&(pklink->mutex), NULL);return pklink;
}int push_klink_head(KLink_t *pklink, void *p)
{KNode_t *pnode = (KNode_t *)p;pnode->pnext = NULL;pnode->ppre = NULL;pnode->pnext = pklink->phead;if (pklink->phead != NULL){pklink->phead->ppre = pnode;}pklink->phead = pnode;pklink->clen++;return 0;
}int push_klink_tail(KLink_t *plink, void *p)
{KNode_t *pnode = (KNode_t *)p;pnode->pnext = NULL;pnode->ppre = NULL;if (plink->phead == NULL){plink->phead = pnode;}else{KNode_t *p = plink->phead;while (p->pnext != NULL){p = p->pnext;}p->pnext = pnode;pnode->ppre = p;}plink->clen++;return 0;
}void klink_for_each(KLink_t *pklink, void (*pfun)(void *))
{KNode_t *pnode = pklink->phead;while (pnode != NULL){pfun(pnode);pnode = pnode->pnext;}
}
KNode_t *find_klink(KLink_t *pklink, void *t, CMP_t pfun)
{KNode_t *pnode = pklink->phead;while (pnode != NULL){if (pfun(t, pnode)){return pnode;}pnode = pnode->pnext;}return NULL;
}int is_empty_klink(KLink_t *pklink)
{return NULL == pklink->phead;
}int pop_klink_head(KLink_t *pklink)
{if (is_empty_klink(pklink))return 0;KNode_t *pdel = pklink->phead;pklink->phead = pdel->pnext;if (pklink->phead != NULL){pklink->phead->ppre = NULL;}free(pdel);pklink->clen--;return 1;
}void destroy_klink(KLink_t *pklink)
{while (!is_empty_klink(pklink)){pop_klink_head(pklink);}free(pklink);
}
相关文章:
数据 结构(内核链表)
一、内核链表(是一个有头双向循环链表) 1.内核提供的两个宏 (1) offsetof : 获取结构体成员到结构体开头的偏移量; (2) contianer_of : 通过偏移量获取结构体首地址; 2.代码示例: truct passager *create_passage…...
学习node.js十三,文件的上传于下载
文件上传 文件上传的方案: 大文件上传:将大文件切分成较小的片段(通常称为分片或块),然后逐个上传这些分片。这种方法可以提高上传的稳定性,因为如果某个分片上传失败,只需要重新上传该分片而…...
【刷题笔记】删除并获取最大点数粉刷房子
欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 题目一 题目链接:删除并获取最大点数 思路: 预处理状态表示 状态转移方程 代码如下: class Solution { public:int deleteAndEarn(vector<int>& nums) {int N1…...
【Linux 从基础到进阶】Elasticsearch 搜索服务安装与调优
Elasticsearch 搜索服务安装与调优 引言 Elasticsearch 是一个分布式的、基于 RESTful API 的搜索和分析引擎,专为快速处理大量数据而设计。它经常被用来进行全文搜索、日志和指标分析等操作。本文将介绍如何在 CentOS 和 Ubuntu 系统上安装 Elasticsearch,并进行必要的调优…...
IMU助力JAXA空间站机器人
近日,日本宇宙航空研究开发机构(JAXA)宣布,在国际空间站(ISS)实验舱“希望号”(Kibo)上部署的一款移动摄像机器人将采用Epson M-G370系列惯性测量单元(IMU)。…...
java开发,记录一些注解和架构
最近接了一个项目,说是项目其实也不算是项目,因为是把这个项目赛到其他项目中的。 熟悉一些这个项目的功能,梳理了一下,在代码开发中主要关心pojo、entity、respository、controller、service。 在这里主要记录前3个的流程与作用…...
【2024高教社杯全国大学生数学建模竞赛】B题 生产过程中的决策问题——解题思路 代码 论文
目录 问题 1:抽样检测方案的设计问题 2:生产过程中的决策问题 3:多工序、多零配件的生产决策问题 4:重新分析次品率题目难度分析1. 统计检测方案设计的复杂性(问题 1)2. 多阶段生产决策的复杂性(…...
JUnit 5和Mockito进行单元测试!
1. JUnit 5 基础 JUnit 5是最新的JUnit版本,它引入了许多新特性,包括更灵活的测试实例生命周期、参数化测试、更丰富的断言和假设等。 1.1 基本注解 Test:标记一个方法为测试方法。 BeforeEach:在每个测试方法之前执行。 AfterEac…...
LeetCode 算法:完全平方数 c++
原题链接🔗:完全平方数难度:中等⭐️⭐️ 题目 给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的…...
深入CSS 布局——WEB开发系列29
CSS 页面布局技术允许我们拾取网页中的元素,并且控制它们相对正常布局流、周边元素、父容器或者主视口/窗口的位置。 一、正常布局流(Normal Flow) CSS的布局基础是“正常流”,也就是页面元素在没有特别指定布局方式时的默认排列…...
视频的容器格式和编码格式详解
视频的容器格式和编码格式是视频文件的两个核心概念,它们相互关联但具有不同的功能。以下是详细的解释: 1. 容器格式 (Container Format) 容器格式,又称封装格式,指的是视频文件的外壳或容器,它用于封装视频、音频、…...
Elasticsearch Mapping 详解
1 概述 映射的基本概念 Mapping 也称之为映射,定义了 ES 的索引结构、字段类型、分词器等属性,是索引必不可少的组成部分。 ES 中的 mapping 有点类似与DB中“表结构”的概念,在 MySQL 中,表结构里包含了字段名称,字…...
WPF 利用视觉树获取指定名称对象、指定类型对象、以及判断是否有验证错误
1.利用视觉树获取指定名称对象 /// <summary> /// Finds a Child of a given item in the visual tree. /// </summary> /// <param name"parent">A direct parent of the queried item.</param> /// <typeparam name"T">T…...
了解`re`模块的`split()`, `sub()`, `subn()`方法的作用
在Python中,re模块(即正则表达式模块)提供了强大的字符串处理能力,允许你通过模式匹配来执行复杂的文本搜索、替换和分割等操作。其中,split(), sub(), 和 subn() 方法是re模块中非常实用的几个函数,它们各…...
机器学习交通流量预测实现方案
机器学习交通流量预测实现方案 实现方案 1. 数据预处理 2. 模型选择 3. 模型训练与评估 代码实现 代码解释 小结 🎈边走、边悟🎈迟早会好 交通流量预测是机器学习在智能交通系统中的典型应用,通常用于预测道路上的车辆流量、速度和拥…...
QNN:基于QNN+example重构之后的yolov8det部署
QNN是高通发布的神经网络推理引擎,是SNPE的升级版,其主要功能是: 完成从Pytorch/TensorFlow/Keras/Onnx等神经网络框架到高通计算平台的模型转换; 完成模型的低比特量化(int8),使其能够运行在高…...
Redis实战宝典:开发规范与最佳实践
目录标题 Key命名设计:可读性、可管理性、简介性Value设计:拒绝大key控制Key的生命周期:设定过期时间时间复杂度为O(n)的命令需要注意N的数量禁用命令:KEYS、FLUSHDB、FLUSHALL等不推荐使用事务删除大key设置合理的内存淘汰策略使…...
RPC的实现原理架构
RPC(Remote Procedure Call,远程过程调用)是一种允许程序调用位于不同地址空间或网络上的函数或方法的技术,尽管这些调用看起来像是本地调用。RPC 的实现极大地简化了分布式系统中的通信,避免了开发人员直接处理底层网…...
OpenXR Monado Hello_xr提交Frame
OpenXR Monado Hello_xr提交Frame @src/tests/hello_xr/openxr_program.cpp RenderFrame())xrWaitFrame(m_session, &frameWaitInfo, &frameState)xrBeginFrame(m_session, &frameBeginInfo)std::vector<XrCompositionLayerBaseHeader*> layers;std::vecto…...
huggingface快速下载模型及其配置
大家知道,每次进huggingface里面一个个手动下载文件然后再上传到我们的服务器是很麻烦的。其实huggingface提供了下载整个包的命令,很简单,如下: 1. 进入huggingface官网,随便搜索一个模型,点击右上角的三…...
高效3D医学图像分割实战:MedSAM从入门到精通
高效3D医学图像分割实战:MedSAM从入门到精通 【免费下载链接】MedSAM Segment Anything in Medical Images 项目地址: https://gitcode.com/gh_mirrors/me/MedSAM MedSAM(Segment Anything in Medical Images)是一款专为医学影像设计的…...
山地农田泵站数据采集远程监控系统方案
某地多为丘陵山地等地形,山顶水资源为丰富,水库蓄水充足,但由于山势陡峭、地势沟壑纵横,水流难以翻山越岭,导致各个农田难以得到充分灌溉,影响到当地的农民收益。如果采取各个农田分别开渠引水的方式&#…...
5个维度精通Common Voice:开源语音数据集全栈应用指南
5个维度精通Common Voice:开源语音数据集全栈应用指南 【免费下载链接】cv-dataset Metadata and versioning details for the Common Voice dataset 项目地址: https://gitcode.com/gh_mirrors/cv/cv-dataset 在语音识别技术快速发展的今天,高质…...
AsrTools:免费语音转文字工具的全方位应用指南
AsrTools:免费语音转文字工具的全方位应用指南 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text in…...
Linux命令——文件内容替换
文件内容替换1. 最常用:sed 替换(直接改文件)格式示例2. 带特殊符号(斜杠 /、冒号、 等)怎么替换?3. 想先看一眼改了啥,不直接修改文件4. 替换整个文件内容(覆盖)1. 最常…...
OpenClaw+Qwen3-14B组合优化:长文本处理的内存占用实测
OpenClawQwen3-14B组合优化:长文本处理的内存占用实测 1. 为什么需要关注长文本处理的显存占用? 上周我在整理一批技术文档时遇到了一个典型问题:用OpenClaw调用Qwen3-14B处理200页的PDF文件时,系统突然崩溃。查看日志才发现是显…...
基恩士VL扫描仪:高效检测场景的适配之选
一、引言企业选购3D扫描仪时,“哪个品牌性价比高”是核心决策难题。性价比并非单纯看价格高低,而是精度、效率、操作成本与长期服务的综合平衡,这也是企业筛选3D扫描仪品牌的核心评判维度。当前制造业检测流程优化需求迫切,接触式…...
OpenClaw硬件加速:在NVIDIA显卡上优化Kimi-VL-A3B-Thinking推理速度
OpenClaw硬件加速:在NVIDIA显卡上优化Kimi-VL-A3B-Thinking推理速度 1. 从CPU到GPU的性能跃迁之旅 去年冬天,当我第一次在本地部署Kimi-VL-A3B-Thinking模型时,那个漫长的等待过程至今记忆犹新。一个简单的图文问答任务,在16核C…...
CSS如何优化大型网站样式_利用BEM架构保持代码条理性
BEM通过命名约束避免样式冲突和维护灾难:Block(如card)为独立单元,Element(如card__title)须依附Block,Modifier(如card--featured)表状态且不单独使用。为什么BEM能避免…...
QWEN-AUDIO技术博文:赛博可视化交互设计如何提升TTS产品用户体验
QWEN-AUDIO技术博文:赛博可视化交互设计如何提升TTS产品用户体验 你有没有想过,为什么有些语音合成工具用起来总觉得“差点意思”?输入文字,点击生成,然后等待一个冷冰冰的音频文件下载完成。整个过程就像在操作一台老…...
