2402C++,C++使用单链列表

原文

#include <windows.h>
#include <malloc.h>
#include <stdio.h>//用于`列表项`的结构;第一个成员是`SLIST_ENTRY`结构,其他成员是数据.在此,数据只是测试
typedef struct _PROGRAM_ITEM {SLIST_ENTRY ItemEntry;ULONG Signature; 
} PROGRAM_ITEM, *PPROGRAM_ITEM;
int main( )
{ULONG Count;PSLIST_ENTRY pFirstEntry, pListEntry;PSLIST_HEADER pListHead;PPROGRAM_ITEM pProgramItem;//初化`列表头`为`MEMORY_ALLOCATION_ALIGNMENT`边界.pListHead = (PSLIST_HEADER)_aligned_malloc(sizeof(SLIST_HEADER),MEMORY_ALLOCATION_ALIGNMENT);if( NULL == pListHead ){printf("分配失败\n");return -1;}InitializeSListHead(pListHead);//在列表中插入`10`个项目.for( Count = 1; Count <= 10; Count += 1 ){pProgramItem = (PPROGRAM_ITEM)_aligned_malloc(sizeof(PROGRAM_ITEM),MEMORY_ALLOCATION_ALIGNMENT);if( NULL == pProgramItem ){printf("分配失败");return -1;}pProgramItem->Signature = Count;pFirstEntry = InterlockedPushEntrySList(pListHead, &(pProgramItem->ItemEntry)); }//从列表中删除`10`项,并显示签名.for( Count = 10; Count >= 1; Count -= 1 ){pListEntry = InterlockedPopEntrySList(pListHead);if( NULL == pListEntry ){printf("List is empty.\n");return -1;}pProgramItem = (PPROGRAM_ITEM)pListEntry;printf("Signature is %d\n", pProgramItem->Signature);//此例假定`SLIST_ENTRY`结构,是该结构的第一个成员.如果结构不遵循此约定,则必须在调用`free`函数前,计算结构的`起始地址`._aligned_free(pListEntry);}//刷新列表并验证项是否已消失.pListEntry = InterlockedFlushSList(pListHead);pFirstEntry = InterlockedPopEntrySList(pListHead);if (pFirstEntry != NULL){printf("Error: List is not empty.\n");return -1;}_aligned_free(pListHead);return 1;
}

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

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

相关文章

nodejs 实现pdf与图片互转

PDF转图片 效果图 代码 const path require(path); const pdf require(pdf-poppler); const fs require(fs); // PDF文件路径 const pdfFilePath ./path/test.pdf; // 转换选项 const opts { format: png, // 输出图片格式&#xff0c;可以是 jpeg, png, ppm…

3d 舞蹈同步

目录 看起来很强大 unity驱动bvh跳舞&#xff1a; 脚飘动问题&#xff1a; bvh和播放关节对应关系 zxy格式 bvh和播放关节对应关系 zyx的对应关系&#xff1a; bvh播放器&#xff1a; 看起来很强大 GitHub - FORTH-ModelBasedTracker/MocapNET: We present MocapNET, a …

AIGC(生成式人工智能)如何掀起数字化转型的巨浪?

数字化转型已成为当下企业发展的必经之路&#xff0c;而生成式AI作为这场变革的强力引擎&#xff0c;正逐渐展现出其无与伦比的价值。今天&#xff0c;我们将深入探讨生成式AI在日志整理、数据清晰、产品设计等方面的应用&#xff0c;揭示它如何为数字化转型注入强大动力&#…

centos7 无网络安装telnet

一、上传压缩包telnet-20240227.zip并解压 unzip -o telnet-20240227.zip 二、依次安装rpm包 rpm -ivh xinetd-2.3.15.el7.x86_64.rpm rpm -ivh telnet-0.17-65.el7.x86_64.rpm rpm -ivh telnet-server-0.17-65.el7.x86_64.rpm 三、查看是否安装成功 rpm -qa | grep telnet…

数据结构-关键路径

介绍 在AOV网的基础上&#xff0c;如果用对应边来表示活动持续时间&#xff0c;这种有向图被称为AOE网在AOE网中&#xff0c;入度为0的为源点&#xff0c;出度为0的为汇点&#xff0c;整张网看做是一件事情完成的过程&#xff0c;那么这两个点就是事情的开始和结束。每个活动持…

WPF的DataGrid自动生成中文列头

直接将一个对象集合绑定到DataGrid上面&#xff0c;设置自动生成列AutoGenerateColumns"True"&#xff0c;DataGrid会自动根据对象类的属性生成对应的列 示例类对象&#xff1a; public class DataModel{public int Id { get; set; }public string Name { get; set;…

Rocky Linux 运维工具yum

一、yum的简介 ​​yum​是用于在基于RPM包管理系统的包管理工具。用户可以通过 ​yum​来搜索、安装、更新和删除软件包&#xff0c;自动处理依赖关系&#xff0c;方便快捷地管理系统上的软件。 二、yum的参数说明 1、install 用于在系统的上安装一个或多个软件包 2、seach 用…

麒麟银河操作系统V10部署ffmpeg

麒麟银河操作系统V10部署ffmpeg 部署ffmpeg用来处理视频的各种操作 想使用ffmpeg&#xff0c;要先安装nasm&#xff0c;yasm&#xff0c;x264之后&#xff0c;否则会报错 nkvers 查看麒麟操作系统版本 cat /proc/version #查看linux版本信息 uname -a #查看linux版本和内核…

在TMP中计算书名号《》高度的问题

1&#xff09;在TMP中计算书名号《》高度的问题 2&#xff09;FMOD设置中关于Virtual Channel Count&Real Channel Count的参数疑问 3&#xff09;Unity 2021.3.18f1 ParticleSystemTrailGeometryJob粒子拖尾系统崩溃 4&#xff09;XLua打包Lua文件粒度问题 这是第375篇UWA…

数据库管理-第156期 Oracle Vector DB AI-07(20240227)

数据库管理156期 2024-02-27 数据库管理-第156期 Oracle Vector DB & AI-07&#xff08;20240227&#xff09;1 Vector相关DDL操作可以在现有的表上新增vector数据类型的字段&#xff1a;可以删除包含vector数据类型的列&#xff1a;可以使用CTAS的方式&#xff0c;从其他有…

Unity Shader - sahder变体剔除

文章目录 吐槽优化方案 - 目前最靠谱的方式shadercsharp 吐槽 我之所以单独写这边文章&#xff0c;是因为之前写的一篇&#xff1a; Unity Shader - Built-in管线下优化变体&#xff0c;编辑后&#xff0c;无法保存&#xff0c;一直提示&#xff1a;操作超时。 等了差不多 3…

vue使用Swiper插件实现卡片化轮播图

1.安装swiper 官网&#xff1a;Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 注意&#xff1a; 下载插件【要5.x】&#xff0c;不然会出现各种BUG。 npm i swiper5.x vue-awesome-swiper4.1.1 -S 2.HTML代码 <div class"examples"><div class"s…

Redis高性能策略以及各种缓存异常问题和解决方案

目录 Day 2.25 异步子线程机制 CPU架构类型&#xff0c;以及可能产生的影响 Day 2.26 redis 缓存与后端 MySQL 数据不一致问题 redis 缓存异常问题 &#xff08;缓存雪崩&#xff0c;缓存击穿&#xff0c;缓存穿透&#xff09;及 解决措施 布隆过滤器实现原理 Day 2.25 …

【C语言】linux内核netdev_start_xmit函数

一、中文注释 static inline netdev_tx_t netdev_start_xmit(struct sk_buff *skb, struct net_device *dev, struct netdev_queue *txq, bool more) {// 获取网络设备操作集合const struct net_device_ops *ops dev->netdev_ops;int rc;// 调用实际发送数据包的函数&…

ElasticSearch之找到乔丹的空中大灌篮电影

写在前面 本文看一个搜索的实际例子&#xff0c;找到篮球之神乔丹的电影Space Jam&#xff0c;即空中大灌篮。 正式开始之前先来看下要查询的目标文档&#xff0c;以及查询的text&#xff1a; 要查询的目标文档 {..."title": "Space Jam",..."ove…

什么是智能合约

前言&#xff1a;在介绍智能合约的前提下&#xff0c;需要先介绍一下区块链 一.什么是区块链 区块链实质上是一个去中心化、分布式的可进行交易的数据库或账本&#xff0c;具有下列典型特征&#xff1a; 去中心化&#xff1a;简单来说&#xff0c;在网络上一个或多个服务器瘫…

Java设计模式:单例模式之六种实现方式详解(二)

在Java中&#xff0c;单例模式是一种常见的设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。单例模式在多种场景下都很有用&#xff0c;比如配置文件的读取、数据库连接池、线程池等。本文将详细介绍Java中实现单例模式的六种方…

组合模式(Composite Pattern)

定义 组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你将对象组合成树形结构&#xff0c;并且能像使用单独对象一样使用组合对象。组合模式让客户端代码对单个对象和复合对象的使用具有一致性。 在组合模式中&#xff0c;我们定义…

Spring Boo项目中方法参数对象中字段上存在的自定义注解如何进行拦截解析

一、前言 在Spring Boot项目开发过程中&#xff0c;我们经常会使用到自定义注解的方式进行业务逻辑开发&#xff0c;此时注解我们一般是放在方法或者类上面&#xff0c;通过AOP切面拦截的方式进行自定义业务逻辑填充。但是如果自定义注解放在类的字段上&#xff0c;此时应该如…

Clickhouse填坑记4:Too many parts问题分析

Clickhouse在进行大数据量同步时,感觉很爽,插入速度非常快,但是,在使用过程中却出现了几次“Too many parts”异常报错,搞得很痛苦,这里记录一下解决过程。 我这边采用的是Flink程序,实时将数据写入ClickHouse,在执行一段时间后,会提示“Too many parts”异常,如下异…