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

java基于雙向環(huán)形鏈表解決丟手帕問題的方法示例

 更新時間:2017年11月07日 12:21:14   作者:逐兔郎  
這篇文章主要介紹了java基于雙向環(huán)形鏈表解決丟手帕問題的方法,簡單描述了丟手帕問題,并結(jié)合實例形式給出了Java基于雙向環(huán)形鏈表解決丟手帕問題的步驟與相關操作技巧,需要的朋友可以參考下

本文實例講述了java基于雙向環(huán)形鏈表解決丟手帕問題的方法。分享給大家供大家參考,具體如下:

問題:設編號為1、2……n的幾個小孩圍坐一圈,約定編號為k(1=<k<=n)的小孩從1開始報數(shù),數(shù)到m的那個出列,他的下一位又從1開始報數(shù),數(shù)到m的那個人又出列,直到所有人出列為止,由此產(chǎn)生一個出隊編號的序列。

我們現(xiàn)在用一個雙向環(huán)形鏈表來解這一問題。先來看看下面這幅圖:

圓圈代表一個結(jié)點,紅色的指針指向下一個元素,紫色的指針指向上一個元素。first指針指向第一個元素,表明第一個元素的位置,cursor是游標指針,它的作用重大。那么這個環(huán)形的鏈表就可以模擬小孩排成的圓圈,下面是具體的代碼:

public class Test {
  public static void main(String[] args){
      CycleLink cl=new CycleLink(5); //構(gòu)造環(huán)形鏈表
      System.out.println("腳本之家測試結(jié)果:");
      cl.print();
      cl.setK(2); //設置從第幾個小孩開始數(shù)數(shù)
      cl.setM(3); //設置數(shù)幾下
      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;
  //從第幾個小孩開始數(shù)
  private int k=1;
  //數(shù)幾下
  private int m=1;
  //構(gòu)造函數(shù)
  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){
      //數(shù)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;
  }
}

這個代碼的基本框架是根據(jù)韓順平的視頻的。不過他用的是一個單向的鏈表,上面的代碼注釋的部分是用來找cursor所指向的元素的上一個元素的,是將整個鏈表轉(zhuǎn)了一圈來實現(xiàn)的。這里我改成了雙向鏈表,直接用一個cursor.previousChild就可以了。

運行結(jié)果:

更多關于java算法相關內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設計有所幫助。

相關文章

  • Java包裝類之自動裝箱與拆箱

    Java包裝類之自動裝箱與拆箱

    這篇文章主要介紹了Java包裝類之自動裝箱與拆箱,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Java面試題之HashSet的實現(xiàn)原理

    Java面試題之HashSet的實現(xiàn)原理

    這篇文章主要介紹了Java面試題之HashSet的實現(xiàn)原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • 關于Java多線程上下文切換的總結(jié)

    關于Java多線程上下文切換的總結(jié)

    CPU通過時間片分配算法來循環(huán)執(zhí)行任務,當前任務執(zhí)行一個時間片后會切換到下一個任務。但是,在切換前會保存上一個任務的狀態(tài),以便下次切換回這個任務時,可以再次加載這個任務的狀態(tài),從任務保存到再加載的過程就是一次上下文切換,需要的朋友可以參考下
    2023-05-05
  • Java中通過sftp協(xié)議實現(xiàn)上傳下載的示例代碼

    Java中通過sftp協(xié)議實現(xiàn)上傳下載的示例代碼

    在java開發(fā)中遇到需要將linux系統(tǒng)中指定目錄下的文件下載到windows本地的需求,本文就來介紹Java中通過sftp協(xié)議實現(xiàn)上傳下載,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • springboot項目如何引用公共模塊的bean

    springboot項目如何引用公共模塊的bean

    這篇文章主要介紹了springboot項目如何引用公共模塊的bean問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Spring boot的上傳圖片功能實例詳解

    Spring boot的上傳圖片功能實例詳解

    Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程。這篇文章主要介紹了Spring boot 上傳圖片,需要的朋友可以參考下
    2018-03-03
  • Springboot發(fā)送post請求的幾種方式總結(jié)

    Springboot發(fā)送post請求的幾種方式總結(jié)

    這篇文章主要為大家詳細介紹了Springboot發(fā)送post請求的幾種方式,文中的示例代碼講解詳細,對我們學習或工作有一定的幫助,感興趣的小伙伴可以了解一下
    2024-01-01
  • Java?工具類實現(xiàn)音頻音量提升

    Java?工具類實現(xiàn)音頻音量提升

    本文主要介紹了可以將音頻提升音量的一個java工具類示例代碼,代碼具有一定的學習價值,感興趣的小伙伴來了解一下吧,,希望能夠給你帶來幫助
    2021-11-11
  • 微信小程序調(diào)用微信登陸獲取openid及java做為服務端示例

    微信小程序調(diào)用微信登陸獲取openid及java做為服務端示例

    這篇文章主要介紹了微信小程序調(diào)用微信登陸獲取openid及java做為服務端示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • java啟動線程的3種方式對比分析

    java啟動線程的3種方式對比分析

    這篇文章主要為大家對比分析了java啟動線程的3種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評論

宽城| 双桥区| 张掖市| 民乐县| 巴南区| 西安市| 灯塔市| 进贤县| 斗六市| 方正县| 噶尔县| 桂平市| 正定县| 韶关市| 常宁市| 英德市| 宁都县| 永胜县| 桃江县| 沁水县| 镇康县| 增城市| 盘锦市| 宁德市| 永定县| 安西县| 炉霍县| 星座| 白山市| 浙江省| 股票| 丰原市| 潜江市| 保康县| 乐东| 剑河县| 京山县| 靖西县| 常熟市| 沙坪坝区| 金堂县|