最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用單鏈表實(shí)現(xiàn)約瑟夫環(huán)

 更新時(shí)間:2021年10月28日 15:08:47   作者:流浪少年的夢(mèng)  
這篇文章主要為大家詳細(xì)介紹了Java使用單鏈表實(shí)現(xiàn)約瑟夫環(huán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Java使用單鏈表實(shí)現(xiàn)約瑟夫環(huán)的具體代碼,供大家參考,具體內(nèi)容如下

構(gòu)建一個(gè)單向的環(huán)形鏈表思路

1.先創(chuàng)建第一個(gè)節(jié)點(diǎn), 讓first指向該節(jié)點(diǎn), 并形成環(huán)形
2.后面當(dāng)我們每創(chuàng)建一個(gè)新的節(jié)點(diǎn), 就把該節(jié)點(diǎn)加入到已有的環(huán)形鏈表中即可.

遍歷環(huán)形鏈表思路

1.先讓一個(gè)輔助指針(變量)curBoy, 指向first節(jié)點(diǎn)
2.然后通過(guò)一個(gè)while循環(huán)遍歷該環(huán)形鏈表即可 curBoy.next == first 結(jié)束

生成小孩出圈順序的思路

1.根據(jù)用戶的輸入, 生成一個(gè)小孩出圈的順序

n = 5, 即有 5 個(gè)人
k = 1, 即從第1個(gè)人開始數(shù)數(shù)
m =2, 每次進(jìn)行數(shù)兩下

2.需求創(chuàng)建一個(gè)輔助指針(變量)helper, 事先應(yīng)該指向環(huán)形鏈表的最后這個(gè)節(jié)點(diǎn)

3.在小孩報(bào)數(shù)前, 讓first 指針和 helper指針?lè)謩e指向正確的位置, 即需要移動(dòng) k-1次

4.在小孩報(bào)數(shù)時(shí), 每次讓first指針和helper指針移動(dòng) m-1次

5.此時(shí) first指針 指向的節(jié)點(diǎn)就是出圈的節(jié)點(diǎn)

代碼實(shí)現(xiàn)

first = frist.getNext();
helper.next = first;

由于first指向的節(jié)點(diǎn)數(shù)就沒(méi)有任何引用, 就會(huì)被回收

package com.beyond.linkedlist;

import org.omg.CORBA.PUBLIC_MEMBER;

public class Josepfu {
 public static void main(String[] args){
  CircleSingleLinkedList name = new CircleSingleLinkedList();
  name.addBoy(5);
  name.showBoy();
  name.countBoy(1, 2, 5);
 }

}

//創(chuàng)建一個(gè)環(huán)形的單向鏈表
class CircleSingleLinkedList {
 // 創(chuàng)建一個(gè)first節(jié)點(diǎn),當(dāng)前沒(méi)有編號(hào)的
 private Boy first = new Boy(-1);

 // 添加小孩節(jié)點(diǎn),構(gòu)成一個(gè)環(huán)形的鏈表
 public void addBoy(int nums) {
  if (nums < 1) {
   System.out.println("nums 的值不正常");
   return;
  }
  Boy curBoy = null; // 輔助指針,幫助構(gòu)造環(huán)形鏈表
  // 使用for來(lái)創(chuàng)建我們的環(huán)形鏈表
  for (int i = 1; i <= nums; i++) {
   // 根據(jù)編號(hào),創(chuàng)建小孩節(jié)點(diǎn)
   Boy boy = new Boy(i);
   // 如果是第一個(gè)小孩
   if (i == 1) {
    first = boy;
    first.setNext(first);
    curBoy = first;
   } else {
    curBoy.setNext(boy);
    boy.setNext(first);
    curBoy = boy;
   }

  }

 }

 // 遍歷當(dāng)前的環(huán)形鏈表
 public void showBoy() {
  if (first == null) {
   System.out.println("沒(méi)有小孩!");
   return;
  }
  // 因?yàn)閒irst不能動(dòng), 因此我們?nèi)匀皇褂靡粋€(gè)輔助指針完成遍歷
  Boy curBoy = first;
  while (true) {
   System.out.printf("小孩的編號(hào)%d \n", curBoy.getNo());
   if (curBoy.getNext() == first) {
    break;
   }
   curBoy = curBoy.getNext(); // 后移
  }
 }

 // 根據(jù)用戶的輸入,計(jì)算出小孩出圈的順序
 /**
  * 
  * @param startNo  表示從第幾個(gè)小孩開始數(shù)數(shù)
  * @param countNum 表示數(shù)幾下
  * @param nums     表示最初有多少個(gè)小孩在圈子中
  */
 public void countBoy(int startNo, int countNum, int nums) {
  if (first == null || startNo < 1 || startNo > nums) {
   System.out.println("輸入數(shù)據(jù)有誤~");
   return;
  }
  // 創(chuàng)建所需要的輔助指針,幫助小孩出圈
  Boy helper = first;
  // 需求創(chuàng)建一個(gè)輔助指針helper, 事先指向該環(huán)形列表的最后這個(gè)節(jié)點(diǎn)
  while (true) {
   if (helper.getNext() == first) {
    break;
   }
   helper = helper.getNext();
  }

  //小孩報(bào)數(shù)前,將指針移動(dòng)到各自開始的位置,移動(dòng) k-1 次
  for (int i = 0; i < startNo-1; i++) {
   first = first.getNext();
   helper = helper.getNext();
  }
  
  //當(dāng)小孩報(bào)數(shù)時(shí), 讓first 和 helper 指針同時(shí)移動(dòng) m-1次, 然后出圈
  //這是一個(gè)循環(huán)操作,直到圈中只剩下一個(gè)小孩為止
  while (true) {
   if (helper == first) {
    break;
   }
   for (int i = 0; i < countNum-1; i++) {
    first = first.getNext();
    helper = helper.getNext();
   }
   System.out.printf("小孩%d出圈!\n",first.getNo());
   first = first.getNext();
   helper.setNext(first);
  }
  System.out.printf("最后留在圈中的小孩編號(hào)為:%d",first.getNo());
 }

}

//先創(chuàng)建一個(gè)Boy類, 表示一個(gè)節(jié)點(diǎn)
class Boy {
 private int no;
 private Boy next;

 public Boy(int no) {
  this.no = no;
 }

 public int getNo() {
  return no;
 }

 public void setNo(int no) {
  this.no = no;
 }

 public Boy getNext() {
  return next;
 }

 public void setNext(Boy next) {
  this.next = next;
 }

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • MyBatis源碼解析——獲取SqlSessionFactory方式

    MyBatis源碼解析——獲取SqlSessionFactory方式

    這篇文章主要介紹了MyBatis源碼解析——獲取SqlSessionFactory方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 學(xué)會(huì)Java字節(jié)碼指令,成為技術(shù)大佬

    學(xué)會(huì)Java字節(jié)碼指令,成為技術(shù)大佬

    Java 字節(jié)碼指令是 JVM 體系中非常難啃的一塊硬骨頭,我估計(jì)有些讀者會(huì)有這樣的疑惑,“Java 字節(jié)碼難學(xué)嗎?我能不能學(xué)會(huì)?。俊北疚膸ьI(lǐng)大家一探究竟,幫助大家搞懂java底層代碼如何執(zhí)行
    2021-08-08
  • Java?Excel?Poi字體顏色自定義設(shè)置代碼

    Java?Excel?Poi字體顏色自定義設(shè)置代碼

    最近項(xiàng)目使用POI按模板導(dǎo)出Excel,需要設(shè)置單元格的字體為紅色,下面這篇文章主要給大家介紹了關(guān)于Java?Excel?Poi字體顏色自定義設(shè)置的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Spring security 如何開放 Swagger 訪問(wèn)權(quán)限

    Spring security 如何開放 Swagger 訪問(wèn)權(quán)限

    這篇文章主要介紹了Spring security 如何開放 Swagger 訪問(wèn)權(quán)限操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • IDEA中用maven連接數(shù)據(jù)庫(kù)的教程

    IDEA中用maven連接數(shù)據(jù)庫(kù)的教程

    這篇文章主要介紹了IDEA中用maven連接數(shù)據(jù)庫(kù)的教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 使用Spring自定義注解實(shí)現(xiàn)任務(wù)路由的方法

    使用Spring自定義注解實(shí)現(xiàn)任務(wù)路由的方法

    本篇文章主要介紹了使用Spring自定義注解實(shí)現(xiàn)任務(wù)路由的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java Stream中的Spliterator類概念及原理解析

    Java Stream中的Spliterator類概念及原理解析

    Spliterator是Java 8引入的一個(gè)接口,位于java.util包中,它結(jié)合了迭代器(Iterator)的遍歷能力和分割器(Splitter)的分割能力,本文將詳細(xì)介紹Spliterator的概念、原理、作用、類中定義的關(guān)鍵方法,以及它在Stream API中的實(shí)際應(yīng)用,感興趣的朋友一起看看吧
    2024-08-08
  • SpringBoot集成JWT的工具類與攔截器實(shí)現(xiàn)方式

    SpringBoot集成JWT的工具類與攔截器實(shí)現(xiàn)方式

    這篇文章主要介紹了SpringBoot集成JWT的工具類與攔截器實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Geotools實(shí)現(xiàn)shape文件的寫入功能

    Geotools實(shí)現(xiàn)shape文件的寫入功能

    Geotools作為開源的Java?GIS三方庫(kù),已經(jīng)成為GIS服務(wù)器端的主流開源庫(kù),其功能非常強(qiáng)大,涉及到GIS業(yè)務(wù)的方方面面,其中就包括GIS數(shù)據(jù)的讀寫,今天小編就借助Geotools來(lái)實(shí)現(xiàn)shape數(shù)據(jù)的寫入,需要的朋友可以參考下
    2023-08-08
  • kotlin之協(xié)程的理解與使用詳解

    kotlin之協(xié)程的理解與使用詳解

    這篇文章主要介紹了kotlin之協(xié)程的理解與使用詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評(píng)論

江城| 青龙| 孟村| 湖州市| 荔波县| 罗山县| 子洲县| 梁平县| 深水埗区| 榆树市| 正阳县| 丰顺县| 孟村| 乌兰县| 延寿县| 平果县| 谢通门县| 华阴市| 彩票| 盱眙县| 庐江县| 淮南市| 全椒县| 巴林右旗| 寻乌县| 铅山县| 玉环县| 章丘市| 太湖县| 满城县| 渭源县| 邛崃市| 如东县| 金平| 新乡市| 汽车| 金阳县| 潞城市| 鹤庆县| 原平市| 南华县|