约瑟夫环问题,是一个经典的循环

出列顺序依次为:

编号为 3 的人开始数 1,然后 4 数 2,所以 4 先出列;

4 出列后,从 5 开始数 1,1 数 2,所以 1 出列;

1 出列后,从 2 开始数 1,3 数 2,所以 3 出列;

3 出列后,从 5 开始数 1,2 数 2,所以 2 出列;

最后只剩下 5 自己,所以 5 出列。

完整代码:

#include

#include

typedef struct node{

int number;

struct node * next;

}person;

person * initLink(int n){

person * head=(person*)malloc(sizeof(person));

head->number=1;

head->next=NULL;

person * cyclic=head;

for (int i=2; i<=n; i++) {

person * body=(person*)malloc(sizeof(person));

body->number=i;

body->next=NULL;

cyclic->next=body;

cyclic=cyclic->next;

}

cyclic->next=head;//首尾相连

return head;

}

void findAndKillK(person * head,int k,int m){

person * tail=head;

//找到链表第一个结点的上一个结点,为删除操作做准备

while (tail->next!=head) {

tail=tail->next;

}

person * p=head;

//找到编号为k的人

while (p->number!=k) {

tail=p;

p=p->next;

}

//从编号为k的人开始,只有符合p->next==p时,说明链表中除了p结点,所有编号都出列了,

while (p->next!=p) {

//找到从p报数1开始,报m的人,并且还要知道数m-1de人的位置tail,方便做删除操作。

for (int i=1; i

tail=p;

p=p->next;

}

tail->next=p->next;//从链表上将p结点摘下来

printf("出列人的编号为:%d\n",p->number);

free(p);

p=tail->next;//继续使用p指针指向出列编号的下一个编号,游戏继续

}

printf("出列人的编号为:%d\n",p->number);

free(p);

}

int main() {

printf("输入圆桌上的人数n:");

int n;

scanf("%d",&n);

person * head=initLink(n);

printf("从第k人开始报数(k>1且k

int k;

scanf("%d",&k);

printf("数到m的人出列:");

int m;

scanf("%d",&m);

findAndKillK(head, k, m);

return 0;

}

输出结果:

输入圆桌上的人数n:5

从第k人开始报数(k>1且k<5):3

数到m的人出列:2

出列人的编号为:4

出列人的编号为:1

出列人的编号为:3

出列人的编号为:2

出列人的编号为:5

约瑟夫环数据结构c语言程序,约瑟夫环问题详解(C语言链表实现)相关推荐

  1. c语言程序设计中北答案详解,C语言程序设计试题及答案解析汇编.doc

    C语言程序设计试题及答案解析汇编 C语言程序设计试题 第1.2.3章 概述.类型.表达式 一.选择题 一个C程序由若干个C函数组成,各个函数在文件中的位置顺序为:( ) 任意 第一个函数必须是主函数, ...

  2. C语言程序的编译+链接详解

    文章目录 前言 一.引子 二.翻译环境 三.运行环境 总结 前言 同学们在写代码的时候,我们往往要先创建一个源文件比如test.c.写完具体代码并运行后,我们的文件夹中会生成一个test.exe的文件 ...

  3. c语言中的字符串数组,详解C语言中的字符串数组

    在C语言当中,字符串数组可以使用: char a[] [10]; 或者 char *a[]; 表示 第一种表示方式固定了每个字符串的最大大小.第二种没有字符串的大小限制. #include #incl ...

  4. c语言遍历 json字符串,全面详解c语言使用cJSON解析JSON字符

    为什么选择cJSON来解析JSON字符串?因为简洁又简单,而且效率又快,cJSON工程文件也非常简单,仅一个.c文件和一个.h文件! 如果要自己写的话就是重造轮子了,况且效率上也不一定会比cJSON更 ...

  5. c语言二级指针内存释放,详解C语言-二级指针三种内存模型

    二级指针相对于一级指针,显得更难,难在于指针和数组的混合,定义不同类型的二级指针,在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] = {&quo ...

  6. c语言随机产生10题,详解C语言的随机数生成及其相关题目

    产生随机数的基本方法 本文中,笔者将介绍c语言所提供的随机数发生器的用法.现在的c编译程序都提供了一个基于一种ANSI标准的伪随机数发生器函数,用来生成随机数.Microsoft和Borland都是通 ...

  7. php函数find的用法,c语言find函数的用法详解

    c语言find函数的用法详解 C语言之find()函数 find函数用于查找数组中的某一个指定元素的位置. 比如:有一个数组[0, 0, 5, 4, 4]: 问:元素5的在什么位置,find函数 返回 ...

  8. c语言将AOE网络的数据写入TXT文档中,数据结构与算法学习辅导及习题详解.张乃孝版-C/C++文档类资源...

    数据结构与算法学习辅导及习题详解.张乃孝版.04年10月 经过几年的努力,我深深体会到,编写这种辅导书要比编写一本湝通教材困难得多. 但愿我的上述理想,在本书中能够得以体现. 本书的组织 本书继承了& ...

  9. c语言线性表库函数大全,数据结构(C语言版)-线性表习题详解

    <数据结构(C语言版)-线性表习题详解>由会员分享,可在线阅读,更多相关<数据结构(C语言版)-线性表习题详解(23页珍藏版)>请在人人文库网上搜索. 1.数 据 结 构 ,线 ...

  10. DSB算法C语言程序,单片机中使用DSB温度传感器C语言程序.doc

    单片机中使用DSB温度传感器C语言程序 单片机中使用DS18B20温度传感器C语言程序(参考1) /************************************************** ...

最新文章

  1. 使用 CodeIgniter 框架快速开发 PHP 应用(二)
  2. xheditor的使用方法
  3. 手机浏览器推荐_推荐一款手机上最好用的浏览器
  4. 我最印象深刻的编程错误经历
  5. 加快网站访问速度--jquery.js
  6. 《金色梦乡》金句摘抄(十一)
  7. 求10以内平均数的c语言,求助 给小学生出题,自己选加减乘除 做10题 10以内的数 然后统计分...
  8. php redis 删除key 通配符,php中redis批量删除key的方法是什么
  9. Springboot01创建第一个程序
  10. selenium 三种断言以及异常类型
  11. linux url%7b怎么转化成,shell下解码url
  12. Ubuntu14.04如何启用界面root账户登录
  13. R语言 echarts4r 不显示图形_【课程预告】清华定量俱乐部lt;R专场gt;第三讲——R可视化基础...
  14. 三菱plc编程电缆通讯端口设置方法(转载)
  15. html+css+JavaScript(菜鸟教程版本)学习笔记7.25
  16. oracle 实现自增序列
  17. clickhouse - 第三章:内置对象 之 第二节:table表操作 - 创建表与删除表
  18. [Bucket CTF 2023]
  19. 一个200左右的数字 四个四个的数多一 六个六个的数少一 七个七个的数多六 问此数为多少。。。
  20. Scratch 与C语言实现数据结构静态链表的建立及操作

热门文章

  1. 5G C-V2X战役一触即发,广和通率先“上车”零碳商用快班车
  2. 峰面积峰高半峰宽_峰高峰面积的计算方法
  3. OpenSSL密码库算法笔记——第1.2章 乘法和平方
  4. 聊天话术一键快捷回复,再也不用复制粘贴了!
  5. android wear恢复出厂,不恢复出厂,用你的新手机连接你的 Wear OS 手表
  6. Allow CORS: Access-Control-Allow-Origin插件使用
  7. 2021-10-22 中值定理的应用
  8. c++ opencv mat_海思平台OpenCV编译与进一步裁剪
  9. 酒店管理软件测试用例,酒店管理系统-测试用例.pdf
  10. 丹麦或将使用区块链为贫困地区提供援助