问题描述:设有n个人站成一圈,每个人有不同的编号i(1<=i<=n),即i∈{1,2,3,4,·····,n},从编号为1的人开始按顺时针方向“1,2,3,···,m”循环报数,数到m的人出列。然后从出列者的下一个人开始重新报数,数到m的人又出列,如此重复进行,直到n个人都出列为止

解决思路:
①先对存储人员信息数据结构进行初始化,初始遍历节点为1
②从遍历节点的人向后遍历m次,定位到要删除的节点,输出相关信息
③删除节点,调整数据结构,人数减1
ⅰ若包含人数仍大于0,遍历节点为删除节点后一位,回②
ⅱ若包含人数为0,结束

具体算法:
①顺序表

for(int i=0; i<cou; i++) {peop[i] = i+1;}System.out.println("出局顺序为:");int oPeo = 0;     //出局位数
while(cou > 0) {//从第一个人开始oPeo = (num + oPeo - 1)%cou;System.out.print(peop[oPeo]+"  ");//元素前移for(int j=oPeo; j<cou-1; j++)peop[j] = peop[j+1];cou--;}

运行结果:

②单向链表

//建立链表
Node firstPeople,moveNode;    //定义头节点和移动节点来生成整个链表
firstPeople = new Node();
firstPeople.setOrder(1);
moveNode = firstPeople;
for(int i=2; i<=cou; i++) {Node midNode = new Node();midNode.setOrder(i);moveNode.setNextPeople(midNode);       moveNode = midNode;
}
moveNode.setNextPeople(firstPeople);    //环状链表//执行游戏
System.out.println("依次出席的顺序(单向链表)为:");
while(cou > 0) {              //此处遍历条件使用余数,使得在人数过小时,遍历次数减少for(int j=1; j<=((num-1)%cou); j++) {     //从尾指针开始,定位到要删除结点的前一位moveNode = moveNode.getNextPeople();    }System.out.print(moveNode.getNextPeople().getOrder()+"  ");//删除结点moveNode.setNextPeople(moveNode.getNextPeople().getNextPeople());cou--;
}

运行结果:

约瑟夫环问题(顺序表和单向链表)相关推荐

  1. 数据结构——线性表:顺序表、单向链表、循环链表、双向链表

    线性表   是一种数据结构:n个数据元素的有限序列 表示形式: L = (a1,a2...an) a1是线性表的元素,小写. n=0时候为空表 数据元素具有相同特性 相邻元素之间存在序偶关系:即有唯一 ...

  2. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置

    <(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...

  3. 数据结构----顺序表与单链表(JAVA)

    下面为学习顺序表和单链表的一些基本操作函数: 1 public class SeqList<T> extends Object { 2 protected int n; 3 protect ...

  4. 线性表之顺序表与单链表的区别及优缺点

    这里比较的是基于C语言实现的顺序表与单链表,与其他语言的实现可能会有差异,但我相信语言是相通的,它们的实现机制应该也差不多. 1.What 什么是顺序表和单链表 ①顺序表: 顺序表是在计算机内存中以数 ...

  5. java如何给顺序表赋值_JAVA模拟新增顺序表及单链表

    最近在回顾大学学的数据结构,这里给大家用javwww.cppcns.coma模拟顺序表和单链表的新增 1顺序表新增 /** * 顺序www.cppcns.com表 * * @author cjd * ...

  6. 顺序表和单链表的插入删除操作时间复杂度的区别

    顺序表和单链表的插入删除操作时间复杂度的区别 最近在学习数据结构,看到如果需要用到大量的插入和删除操作,单链表的效率会高于顺序表.看到这里时内有有个疑惑,这两种数据结构的插入和删除操作的时间复杂度不都 ...

  7. 数据结构——线性表:顺序表、单链表、双链表(C++)

    内容概要: 1.代码部分: 线性表抽象类 顺序表类 单链表类 双链表类 主函数 2.基本概念及注意事项 代码(测试环境VS2017): //线性表ADT类的定义:ADT_List.htemplate ...

  8. 数据结构个人笔记 第三课 顺序表和单链表

    数据结构个人笔记 第三课 顺序表和单链表 顺序表的基本操作 插入元素 删除元素 顺序表查找元素 顺序表更改元素 本节总结代码 单链表 链表的节点 头节点.头指针和首元结点 链表的创建(初始化) 本节总 ...

  9. 数据结构实验二——建立具有至少10个元素的顺序表或单链表,并能对该表进行查找、删除等基本操作。

    结合实际应用,建立具有至少10个元素的顺序表或单链表,并能对该表进行查找.删除等基本操作. //主函数 #include"Sq.h" #include<stdio.h> ...

最新文章

  1. 【百度地图API】百度API卫星图使用方法和卫星图对比工具
  2. java验证码实现简单_java实现简单的验证码功能
  3. 条件概率的几何解释 由定义计算条件概率 由条件概率公式计算条件概率
  4. 【Vue】父子组件的传值(父组件-->子组件、子组件-->父组件)
  5. 周期置换加密算法用c语言实现,古典密码实验报告.doc
  6. 将报表模板中数据集的数据源名称与服务器中的数据源名称修改一致.,连接数据库,服务器端的几个常见错误...
  7. java map 变量_Java源码解析HashMap成员变量
  8. [ZT]CCNA课堂精简笔记 2
  9. 数学连乘和累加运算符号_2020中考数学 初中数学有理数计算(干货)
  10. 为什么 MySQL 不推荐使用 join?
  11. 串口通信基本接线方法
  12. 物理学家揭示深度学习原理:神经网络与宇宙本质惊人关联
  13. 什么是计算机网络体系结构?
  14. linux进程kill后显示deduct,oracle问题
  15. CAD如何安装才是最简单的详细教程方法呈现出来了
  16. cesium加载动图方案三:通过apng-js库实现
  17. vue3.0+ts+element-plus多页签应用模板:侧边导航菜单(上)
  18. PAT(乙级)2020年春季考试真题解析
  19. 花前挥手别伊人,月下纵马扬轻尘,红尘游历,荡剑江湖。四方辗转,看千山飞鸟逐;万里飘蓬,叹海角天涯路。夜风萧瑟雨凄楚,相思情入梦,孤影独对窗前烛,离别意难书。何时平尽心中愿,从此相守不离疏,岁岁年年情深
  20. Joth the Ripper

热门文章

  1. 《Spring源码深度解析》 PDF
  2. Eclipse的JavaWeb项目导入到IntelliJ IDEA 并且配置Tomcat
  3. android 存储方式简书,Android的多种数据存储方式
  4. 了解git的命令行使用
  5. 【Python爬虫】用CSS 选择器提取网页数据
  6. sqlachemy入门基础手册
  7. react 组件名称重复_设计可重复使用的React组件
  8. mysql管理应用_如何在PHP和MySQL中制作出色的库存管理应用程序
  9. springMVC发送邮件
  10. git报错fatal: HTTP request failed