【C语言】 约瑟夫环,循环链表实现

1、循环链表实现约瑟夫环,每次经过特定步数删除一个元素

//looplist.h
#ifndef LOOPLIST_H
#define LOOPLIST_H
#include<stdio.h>
#include<string.h>
#include<stdlib.h>typedef int datatype;typedef struct Node
{union {int len;datatype data;};struct Node *next;
}Node,*NodePtr;//创建循环链表
NodePtr link_create();//判空
int link_empty(NodePtr L);//链表申请空间封装节点
NodePtr apply_node(datatype e);//按位置进行查找
NodePtr list_search_pos(NodePtr L, int pos);//头插
int link_insert_tail(NodePtr L,datatype e);//遍历链表
int link_show(NodePtr L);//约瑟夫
int link_yue(NodePtr L,int flag);
#endif
//looplist.c
#include"looplist.h"//创建循环链表
NodePtr link_create()
{NodePtr L = (NodePtr)malloc(sizeof(Node));if(NULL == L){printf("链表创建失败\n");return NULL;}L->len = 0;L->next = L;printf("创建链表成功\n");return L;
}//判空
int link_empty(NodePtr L)
{return L->next == L;
}//链表申请空间封装节点
NodePtr apply_node(datatype e)
{//堆区申请一个节点的空间NodePtr p = (NodePtr)malloc(sizeof(Node));if(NULL == p){printf("申请失败\n");return NULL;}//给节点赋值p->data = e;p->next = NULL;return p;
}//按位置进行查找
NodePtr list_search_pos(NodePtr L, int pos)
{if(NULL == L || pos < 0 || pos > L->len){printf("查找失败\n");return NULL;}NodePtr q = L;for (int  i = 0; i < pos; i++){q = q->next;}return q;
}//尾插
int link_insert_tail(NodePtr L,datatype e)
{   if(NULL == L){printf("插入失败\n");return -1;}NodePtr q = list_search_pos(L,L->len);NodePtr p = apply_node(e);p->next = q->next;q->next = p;L->len++;printf("插入成功\n");return 0;
}//遍历链表
int link_show(NodePtr L)
{if(NULL == L || link_empty(L)){printf("遍历失败\n");return -1;}NodePtr q = L->next;while(q != L){printf("%d\t",q->data);q = q->next;}printf("\n");
}//约瑟夫
int link_yue(NodePtr L, int flag) {if (L == NULL || flag <= 0 || link_empty(L)) {printf("输入的参数有误或链表为空。\n");return -1;}NodePtr prev = L; NodePtr curr = L->next; while (L->len > 1) { for (int count = 0; count < flag; count++) {prev = curr; curr = curr->next; }printf("删除节点的值为: %d\n", curr->data); prev->next = curr->next; NodePtr temp = curr; curr = curr->next; L->len--; free(temp); }// 输出最后剩下的节点数据printf("最后剩下的节点数据是:%d\n", prev->data);return 0;
}
//main.c
#include"looplist.h"
int main(int argc, char const *argv[])
{NodePtr L = link_create();int flag = 0,n = 0,sum = 0;printf("请输入你想输入的个数:");scanf("%d",&n);//循环插入值for(int i = 0;i < n;i++){printf("请输入第%d个值:",i+1);scanf("%d",&sum);link_insert_tail(L,sum);}printf("当前链表中的元素为:");link_show(L);printf("请输入你想走多少步移除一个数:");scanf("%d",&flag);getchar();//调用约瑟夫环函数link_yue(L,flag);return 0;
}

 输出结果如下:

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

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

相关文章

Elasticsearch:Java ECS 日志记录 - log4j2

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松将日志格式化为与 ECS 兼容的 JSON。ECS 兼容的 JSON 日志记录可以帮我们简化很多分析&#xff0c;可视化及解析的工作。在今天的文章里&#xff0c;我来详述如何在 Java 应用里生成 ECS 相兼容的日志。 …

tensorflow keras Model.fit returning: ValueError: Unrecognized data type

题意&#xff1a;TensorFlow Keras 的 Model.fit 方法返回了一个 ValueError&#xff0c;提示数据类型无法识别 问题背景&#xff1a; Im trying to train a keras model with 2 inputs: an image part thats a tf.data.Dataset and a nor mal part represented by a pd.DataF…

oracle 两行完全相同怎么比较

在Oracle数据库中&#xff0c;要比较两行数据是否完全相同&#xff0c;即比较这两行在所有列上的值是否都相等&#xff0c;可以通过编写SQL查询语句来实现。以下是一些常用的方法&#xff1a; 方法一&#xff1a;使用子查询和EXISTS 这种方法通过子查询来检查是否存在与当前行…

Mojo模型动态批处理:智能预测的终极武器

标题&#xff1a;Mojo模型动态批处理&#xff1a;智能预测的终极武器 在机器学习领域&#xff0c;模型的灵活性和可扩展性是至关重要的。Mojo模型&#xff08;Model-as-a-Service&#xff09;提供了一种将机器学习模型部署为服务的方式&#xff0c;允许开发者和数据科学家轻松…

ActiViz控件解析及C#实践指南

文章目录 1. vtkSliderWidget2. vtkRotateWidget3. vtkButtonWidget4. vtkTextWidget5. vtkImplicitPlaneWidget26. vtkScalarBarWidget7. vtkImageSliceWidget8. vtkHandleWidget9. vtkPointPickerWidget10. vtkSeedWidget1. vtkSliderWidget 功能介绍 vtkSliderWidget是VTK中…

【中项】系统集成项目管理工程师-第4章 信息系统架构-4.5技术架构

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

数据结构之判断平衡二叉树详解与示例(C,C++)

文章目录 AVL树定义节点定义计算高度获取平衡因子判断是否为平衡二叉树完整示例代码结论 在计算机科学中&#xff0c;二叉树是一种非常重要的数据结构。它们被广泛用于多种算法中&#xff0c;如排序、查找等。然而&#xff0c;普通的二叉树在极端情况下可能退化成链表&#xff…

动态特征转换的艺术:在Mojo模型中实现自定义变换的策略

动态特征转换的艺术&#xff1a;在Mojo模型中实现自定义变换的策略 在机器学习中&#xff0c;特征转换是数据预处理的关键步骤&#xff0c;它直接影响模型的性能和结果的准确性。Mojo模型&#xff0c;作为一种高效的模型部署形式&#xff0c;允许在不同环境中运行模型并进行预…

C#基于SkiaSharp实现印章管理(4)

前几篇文章实现了绘制不同外形印章的功能&#xff0c;印章内部一般包含圆形、线条等形状&#xff0c;有些印章内部还有五角星&#xff0c;然后就是各种样式的文字。本文实现在印章内部绘制圆形、线条、矩形、椭圆等四种形状。   定义FigureType枚举记录印章内部形状&#xff…

图像处理 -- ISP调优(tuning)的步骤整理

ISP调优流程培训文档 1. 硬件准备 选择合适的图像传感器&#xff1a;根据项目需求选择合适的传感器型号。搭建测试环境&#xff1a;包括测试板、光源、色彩卡和分辨率卡等。 2. 初始设置 寄存器配置&#xff1a;初始化传感器的寄存器设置&#xff0c;包括曝光、增益、白平衡…

pcie数据传输

一 数据传输通道总体设计 在上传数据时首先将 FPGA 中数据缓存到 DDR3 存储器&#xff0c;然后上位机请求后把数据从DDR3 存储器中取出并通过 PCIE 总线将数据传输到上位机&#xff1b;在下传数据时上位机中的数据首先通过 PCIE 总线下传至 FPGA&#xff0c;FPGA 读取这些数据并…

RabbitMQ+redis+Redisson分布式锁+seata实现订单服务

引言 订单服务涉及许多方面&#xff0c;分布式事务&#xff0c;分布式锁&#xff0c;例如订单超时未支付要取消订单&#xff0c;订单如何防止重复提交&#xff0c;如何防止超卖、这里都会使用到。 开启分布式事务可以保证跨多个服务的数据操作的一致性和完整性&#xff0c;使…

技术文档总结----思维导图

性能调优| ProcessOn免费在线作图,在线流程图,在线思维导图 mysql| ProcessOn免费在线作图,在线流程图,在线思维导图 kafka| ProcessOn免费在线作图,在线流程图,在线思维导图 mybatis缓存| ProcessOn免费在线作图,在线流程图,在线思维导图 java锁| ProcessOn免费在线作图,在…

小程序内嵌uniapp页面跳转回小程序指定页面方式

使用微信小程序提供的Api&#xff1a;wx.miniProgram.navigateTo 在小程序中嵌套uniapp的H5页面&#xff0c;并使用wx.miniProgram.navigateTo进行页面跳转&#xff0c;需要确保满足以下条件&#xff1a; 你的小程序必须是通过uniapp构建的&#xff0c;并且支持小程序嵌套。 你…

宝塔安装完成,但访问https宝塔面板404,可以试试如下操作

问题 宝塔安装好了&#xff0c;日志信息都好的&#xff0c;但访问https访问不了解决 命令行 bt 进入宝塔命令界面宝塔面板命令行(1) 重启面板服务 (8) 改面板端口 | (2) 停止面板服务 (9) 清除面板缓存 | (3) 启动面板服务 (10) 清除登录限制 | (4) 重载面板服务 (11) 设置是…

坑人的macos tar 命令 (实际上是bsdtar)换用 gnu tar

周末 看着笔记本上好用的朗文当代高级词典(mac版)和其它两部词典&#xff0c;准备复制到黑苹果台式机上去。考虑到词典内容有太多小文件&#xff0c;普通复制传输太慢&#xff0c;毫无疑问用 tar 打包肯定快而且能保留原始文件的各种信息。命令如下&#xff1a; time tar czf …

系统架构设计师教程 第3章 信息系统基础知识-3.8 典型信息系统架构模型-解读

系统架构设计师教程 第3章 信息系统基础知识-3.8 典型信息系统架构模型-解读 3.8.1 政府信息化与电子政务3.8.1.1 电子政务的概念3.8.1.2 电子政务的内容3.8.1.2.1 政府与政府3.8.1.2.2 政府对企/事业单位3.8.1.2.3 政府对居民3.8.1.2.4 企业对政府3.8.1.2.5 居民对政府 3.8.1…

【HarmonyOS】HarmonyOS NEXT学习日记:六、渲染控制、样式结构重用

【HarmonyOS】HarmonyOS NEXT学习日记&#xff1a;六、渲染控制、样式&结构重用 渲染控制包含了条件渲染和循环渲染&#xff0c;所谓条件渲染&#xff0c;即更具状态不同&#xff0c;选择性的渲染不同的组件。 而循环渲染则是用于列表之内的、多个重复元素组成的结构中。 …

RabbitMQ的学习和模拟实现|GTest测试框架的介绍和简单使用

GTest 项目仓库&#xff1a;https://github.com/ffengc/HareMQ GTest GTest是什么我们需要学习的GTest功能宏断言事件机制 全局测试套件独立测试套件 GTest是什么 GTest是一个跨平台的 C单元测试框架&#xff0c;由google公司发布。gtest是为了在不同平台上为编写C单元测…

JAVA JUC学习笔记

基础知识 1、进程和线程的对比 进程基本上相互独立的&#xff0c;而线程存在于进程内&#xff0c;是进程的一个子集进程拥有共享的资源&#xff0c;如内存空间等&#xff0c;供其内部的线程共享进程间通信较为复杂 同一台计算机的进程通信称为 IPC&#xff08;Inter-process …