返回顶部
首页 > 资讯 > 精选 >java基于双向环形链表解决丢手帕问题的示例分析
  • 852
分享到

java基于双向环形链表解决丢手帕问题的示例分析

java 2023-05-30 22:05:57 852人浏览 独家记忆
摘要

这篇文章主要为大家展示了“java基于双向环形链表解决丢手帕问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java基于双向环形链表解决丢手帕问题的示例分析”这篇文章吧。具体如下:问

这篇文章主要为大家展示了“java基于双向环形链表解决丢手帕问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java基于双向环形链表解决丢手帕问题的示例分析”这篇文章吧。

具体如下:

问题:设编号为1、2……n的几个小孩围坐一圈,约定编号为k(1=<k<=n)的小孩从1开始报数,数到m的那个出列,他的下一位又从1开始报数,数到m的那个人又出列,直到所有人出列为止,由此产生一个出队编号的序列。

我们现在用一个双向环形链表来解这一问题。先来看看下面这幅图:

java基于双向环形链表解决丢手帕问题的示例分析

圆圈代表一个结点,红色的指针指向下一个元素,紫色的指针指向上一个元素。first指针指向第一个元素,表明第一个元素的位置,cursor是游标指针,它的作用重大。那么这个环形的链表就可以模拟小孩排成的圆圈,下面是具体的代码:

public class Test {  public static void main(String[] args){      CycleLink cl=new CycleLink(5); //构造环形链表      System.out.println("编程测试结果:");      cl.print();      cl.setK(2); //设置从第几个小孩开始数数      cl.setM(3); //设置数几下      cl.play(); //开始游戏  }}class Child{  int no;  Child nextChild;  Child previousChild;  public Child(int no){    this.no=no;  }}class CycleLink{  Child first;  Child cursor;  int length;  //从第几个小孩开始数  private int k=1;  //数几下  private int m=1;  //构造函数  public CycleLink(int len){    this.length=len;    for(int i=1;i<=length;i++){      Child ch=new Child(i);      if(i==1){        first=ch;        cursor=ch;      }else if(i<length){        cursor.nextChild=ch;        ch.previousChild=cursor;        cursor=ch;      }else {        cursor.nextChild=ch;        ch.previousChild=cursor;        cursor=ch;        ch.nextChild=first;        first.previousChild=ch;      }    }  }  //打印链表  public void print(){    cursor=first;    do{      System.out.print(cursor.no+"<<");      cursor=cursor.nextChild;    }while(cursor!=first);    System.out.println();  }  //开始游戏  public void play(){    Child temp;    cursor=first;    //先找到第k个小孩    while(cursor.no<k){      cursor=cursor.nextChild;    }    while(length>1){      //数m下      for(int i=1;i<m;i++){        cursor=cursor.nextChild;      }      System.out.println("小孩"+cursor.no+"出局了!");      //找到前一个小孩      temp=cursor.previousChild;//     temp=cursor;//     do{//       temp=temp.nextChild;//     }while(temp.nextChild!=cursor);      temp.nextChild=cursor.nextChild;      cursor.nextChild.previousChild=temp;      cursor=cursor.nextChild;      length--;    }    System.out.println("最后一个出局的小孩是"+cursor.no);  }  public void setK(int k) {    this.k = k;  }  public void setM(int m) {    this.m = m;  }}

这个代码的基本框架是根据韩顺平的视频的。不过他用的是一个单向的链表,上面的代码注释的部分是用来找cursor所指向的元素的上一个元素的,是将整个链表转了一圈来实现的。这里我改成了双向链表,直接用一个cursor.previousChild就可以了。

运行结果:

java基于双向环形链表解决丢手帕问题的示例分析

以上是“java基于双向环形链表解决丢手帕问题的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: java基于双向环形链表解决丢手帕问题的示例分析

本文链接: https://lsjlt.com/news/221767.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java基于双向环形链表解决丢手帕问题的示例分析
    这篇文章主要为大家展示了“java基于双向环形链表解决丢手帕问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java基于双向环形链表解决丢手帕问题的示例分析”这篇文章吧。具体如下:问...
    99+
    2023-05-30
    java
  • JavaScript数据结构之双向链表和双向循环链表的示例分析
    这篇文章主要为大家展示了“JavaScript数据结构之双向链表和双向循环链表的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript数据结...
    99+
    2024-04-02
  • Java用单向环形链表来解决约瑟夫环Josepfu问题
    简单介绍 如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表,通俗讲就是让尾节点指向头结点。 单向环形链表应用场景:Josephu(约瑟...
    99+
    2024-04-02
  • Java之单链表问题的示例分析
    这篇文章给大家分享的是有关Java之单链表问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。单链表单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表...
    99+
    2023-06-20
  • Java数据结构与算法之双向链表、环形链表及约瑟夫问题深入理解
    目录一、双向链表二、环形链表及其应用:约瑟夫问题环形链表图示构建一个单向的环形链表思路遍历环形链表约瑟夫问题一、双向链表 使用带head头的双向链表实现 - 水浒英雄排行榜管理单向链...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作