循环链表实现约瑟夫问题

问题描述

利用循环链表实现:读入 2 个整数 A 和 B,然后输出 2 个整数 C 和 D。

其中 A 表示人数,这些人的 id 分别为1,2,3,. . . A,他们按照id依次围成一圈。

从id为1的人开始报数,报到B的人退出圈,然后从下一个人开始重新报数,报到 B的人又退出圈,

如此反复,直到剩下2人为止。C和D为剩下的2人的id。

输入描述

在一行中输入大于0且不超过1000的整数A和B,要求A大于B。

输出描述

在一行中输出C和D,由空格隔开,要求D大于C。

样例输入
41 3                  
样例输出
16 31

注意 

分配内存可以采用new和malloc两种方法。

删除结点需要释放内存,以免内存泄漏。

内存泄漏是指向系统申请分配内存进行使用(new),可是使用结束却不归还(delete),导致申请到的内存无法再次访问(地址丢失),系统也不能再次将它分配给需要的程序。内存泄漏本身不会产生什么危害,真正有危害的是内存泄漏的堆积,这会最终消耗尽系统所有的内存。

new与malloc的部分区别
new和deletemalloc和free
属性C++中的关键字库函数
使用无需标明申请的内存大小,new会根据new的类型分配内存申请空间需要表明申请内存的大小
内存位置自由存储区
返回类型内存分配成功时,返回对象类型的指针,类型严格与对象匹配,无须进行类型转换。在C++程序中使用new会比malloc安全可靠内存分配成功返回void * ,需要通过强制类型转换将void*指针转换成需要的类型
分配失败情况new内存分配失败时,会抛出bac_alloc异常,不会返回NULL。分配失败时如果不捕捉异常,程序就会异常退出malloc分配内存失败时返回NULL,可以通过判断返回值得知是否分配成功

表格数据来源:【C++】C++ new和malloc到底哪里不一样 - 李春港 - 博客园 (cnblogs.com)

完整代码

#include<stdio.h>
typedef int DataType;
//定义单链表
typedef struct LNode
{DataType data;   //数据域struct LNode* next;   //指针域
}LNode;   
//创建循环单链表
static LNode* CreateList(int a)
{LNode* head = new LNode;  //创建首元结点  new分配内存head->data = 1;  //首元结点数据域存放1LNode* p = head;for (int i = 2; i <= a; i++){LNode* newnode = new LNode;  //创建新结点newnode->data = i;  p->next=newnode;p = newnode;}p->next = head;  //首尾闭合return head;  //返回首元结点
}
static void Operate(int a, int b)
{LNode* head = CreateList(a);  //接收首元结点LNode* p = head;  //用于遍历循环单链表LNode* del = head;  //标记需要删除的结点while (a > 2){for (int i = 1; i < b; i++){p = del;del = del->next;}//删除结点p->next = del->next;  delete(del);  //释放已删除结点内存del = p->next;a--;}int c = del->data;   //赋值便于比较int d = del->next->data;if (c > d)   //比较cd大小printf("%d %d\n", d, c);elseprintf("%d %d\n", c, d);
}
int main()
{int a, b;scanf("%d%d", &a, &b);Operate(a, b);return 0;
}

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

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

相关文章

C++核心编程和桌面应用开发 第五天(new delete malloc 静态成员 静态成员函数 单例)

目录 1.new运算符 1.1开批数组 2.delete运算符 3.malloc和new的区别 4.万能指针接收new对象 5.静态成员 6.静态成员函数 7. 单例 7.1概念 7.2常见场景 1.new运算符 C中用new进行动态内存分配&#xff0c;new会在调用构造函数之前&#xff0c;成功进行内存分配&#x…

利用F.interpolate()函数进行插值操作

函数简介 功能&#xff1a; 利用插值方法&#xff0c;对输入的张量数组进行上\下采样操作&#xff0c;换句话说就是科学合理地改变数组的尺寸大小&#xff0c;尽量保持数据完整。 torch.nn.functional.interpolate(input, sizeNone, scale_factorNone, modenearest, align_c…

RabbitMQ是什么?RabbitMQ简介

一&#xff1a;技术背景 假如我们有一个支付服务&#xff0c;支付服务的业务逻辑是&#xff1a;首先支付扣减余额&#xff0c;更新支付单状态&#xff0c;更新订单状态&#xff0c;发短信&#xff0c;给这个用户增加积分。在这个场景下&#xff0c;如果我们使用同步调用通信&am…

vscode将c++项目打包exe进行反汇编练习

vscode将c&c项目打包成控制台exe全过程&#xff0c;进行c反汇编练习&#xff0c;反汇编只有不断的练习才能巩固、积累经验。 一、打包exe 创建新项目&#xff0c;选择c&#xff0c;Windows桌面向导 直接点击创建 直接点确定 直接点击运行即可&#xff0c;可以看到我的exe…

15 跨组件通信依赖注入provide和inject

Provide / Inject 通常&#xff0c;当我们需要从父组件向子组件传递数据时&#xff0c;我们使用 props。想象一下这样的结构&#xff1a;有一些深度嵌套的组件&#xff0c;而深层的子组件只需要父组件的部分内容。在这种情况下&#xff0c;如果仍然将 prop 沿着组件链逐级传递…

ROS2 技术及分布式介绍

PC端开发环境搭建 WSL环境搭建 https://www.guyuehome.com/46574 In Windows 11 builds that support wslg: 1. Open up powershell and enter wsl --install ROS2系统安装 方法一 • 设置编码 Bash $ sudo apt update && sudo apt install loca…

EffcientNetV2(2021):更快、更强、效率更高的EffcientNet!

EffcientNetV2: Smaller Models and Faster Training EfficientNetV2&#xff1a;更小的模型和更快的训练 论文地址&#xff1a; https://arxiv.org/abs/2104.00298 本文介绍了 EfficientNetV2&#xff0c;这是一个新的卷积网络系列&#xff0c;与以前的模型相比&#xff0c;它…

HDFS_API文件和文件夹

代码&#xff1a; Beforepublic void init() throws URISyntaxException, IOException {URI uri new URI("hdfs://master:9000");// 创建一个配置文件Configuration entries new Configuration();// 获取到了客户端对象 // entries.set("dfs.replicat…

【嵌入式linux开发】SPI设备文件读取ICM-40609D传感器

【嵌入式linux开发】SPI设备文件操作ICM-40609D传感器 前言一、数据手册浅读二、linux系统下使用SPI设备文件操作ICM-40609-D三、ros1发布imu数据3.1、创建ros1工作空间3.2、数据发布节点代码 前言 在本篇博客中&#xff0c;将从ICM-40609-D传感器的数据手册出发&#xff0c;简…

公安局软件管理平台建设方案和必要性,论文-3-———未来之窗行业应用跨平台架构

三、平台功能设计 四、技术架构 1. 前端界面 - 采用简洁、易用的设计风格&#xff0c;适应不同终端设备的访问。 - 基于 HTML5、CSS3 和 JavaScript 构建。 2. 后端服务 - 选择主流的 Web 开发框架&#xff0c;如 未来之窗跨平台架构&#xff0c;VUE。 - 数据库…

Github Webhook触发Jenkins自动构建

1.功能说明 Github Webhook可以触发Jenkins自动构建&#xff0c;通过配置Github Webhook&#xff0c;每次代码变更之后&#xff08;例如push操作&#xff09;&#xff0c;Webhook会自动通知Jenkins服务器&#xff0c;Jenkins会自动执行预定义的构建任务&#xff08;如Jenkins …

Redis-认识与应用(从ChatGpt的角度看Redis)

问题&#xff1a;您好&#xff0c;我的项目是在线教育平台&#xff0c;用springboot3搭建&#xff0c;我现在想学redis&#xff0c;请问redis能在我的项目中有什么应用场景呢 问题&#xff1a;就是我项目能应用上具体什么场景&#xff0c;请给我例子&#xff0c;并给我具体代码…

springboot整合openfeign

文章目录 准备一、引入必要依赖二、写一个feign client并暴露到注册中心2.1 client2.2 开启Feign客户端功能 三、别的服务引入IProductClient并调用方法3.1 建一个order-service&#xff0c;引入IProductClient所在模块3.2 注入IProductClient&#xff0c;并调用方法 四、启动服…

JAVA基本简介(期末)

1、JDK JRE JVM &#xff08;1&#xff09;JDK JAVA标准开发包&#xff0c;提供了编译、运行JAVA程序所需的各种工具和资源&#xff0c;包括JAVA编译器、JAVA运行时的环境&#xff0c;及常用的JAVA类库等 &#xff08;2&#xff09;JRE JAVA运行环境&#xff0c;用于解释执行JA…

JW01二氧化碳传感器(串行通信 STM32)

目录 一、介绍 二、传感器原理 1.工作原理介绍 2.串口数据流格式 三、程序设计 main.c文件 usart3.h文件 usart3.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 JW01-CO2检测模块是一种用于检测空气中二氧化碳浓度的传感器模块。它可以广泛应用于室内空气质量…

美畅物联丨GB/T 28181系列之TCP/UDP被动模式和TCP主动模式

GB/T 28181《安全防范视频监控联网系统信息传输、交换、控制技术要求》作为我国安防领域的重要标准&#xff0c;为视频监控系统的建设提供了全面的技术指导和规范。该标准详细规定了视频监控系统的信息传输、交换和控制技术要求&#xff0c;在视频流传输方面&#xff0c;GB/T 2…

【Day20240924】05git 两人协作 冲突

git 两人协作 冲突 命令行解决 两个人修改同一文件时 的冲突可视化解决 两个人修改同一文件时 的冲突参考 命令行解决 两个人修改同一文件时 的冲突 假设kerwin.js是项目的路由文件。tiechui文件夹是组员铁锤的工作目录&#xff1b;test2008文件夹是组长的工作目录。此时&…

Redis 优化

目录 优雅的 key 删除 Bigkey 恰当的数据类型 批处理优化 Pipeline 集群下的批处理 服务端优化 持久化配置 慢查询 命令以及安全配置 内存安全和配置 内存缓冲区配置 集群最佳实践 集群带宽问题 集群还是主从 优雅的 key 删除 Bigkey Bigkey 内存占用较多&…

ubuntu 安裝 Poetry 示例

ubuntu 安裝 Poetry 示例 一、前言 poetry 是一个命令行工具&#xff0c;安装之后就可以使用 poetry 指令。可以将其安装全局环境或者是虚拟环境&#xff0c;我推荐安装在全局环境&#xff0c;这样在后面使用时不需要单独激活虚拟环境。 &#xff08;1&#xff09;安装 Poet…

【Linux】组管理权限管理任务调度【更详细,带实操】

Linux全套讲解系列&#xff0c;参考视频-B站韩顺平&#xff0c;本文的讲解更为详细 一、组管理 1、linux组的介绍 linux对文件的管理机制 linux中的文件有三个概念&#xff1a; 1、文件所有者是谁&#xff0c;谁创建了文件&#xff0c;当然文件所有者也可以修改2、文件属于…