春風(fēng)博客

          春天里,百花香...

          導(dǎo)航

          <2008年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統(tǒng)計(jì)

          公告

          MAIL: junglesong@gmail.com
          MSN: junglesong_5@hotmail.com

          Locations of visitors to this page

          常用鏈接

          留言簿(11)

          隨筆分類(224)

          隨筆檔案(126)

          個(gè)人軟件下載

          我的其它博客

          我的鄰居們

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          輪圈數(shù)數(shù)退出問題

          package com.sitinspring.roundtable;

          /** *//**
           * 循環(huán)鏈表節(jié)點(diǎn)類
           * 
          @author: sitinspring(junglesong@gmail.com)
           * @date: 2008-7-1-下午10:42:49
           * 
          @param <T>
           
          */

          class Node{
              
          protected String name;
              
          protected boolean isQuited;
              
          protected Node next;
          }


          /** *//**
           * 循環(huán)鏈表類,用于解決輪圈數(shù)數(shù)退出問題的建模
           * 
          @author: sitinspring(junglesong@gmail.com)
           * @date: 2008-7-1-下午10:42:37
           * 
          @param <T>
           
          */

          public class CircleChainList{
              
          // 頭節(jié)點(diǎn)
              private Node first;
              
              
          // 人個(gè)數(shù)
              private int length;
              
              
          /**
               * 輪圈退出
               * 
          @param interval 間隔或起始數(shù)
               
          */

              
          public void wheelOut(int interval){
                  
          // 總節(jié)點(diǎn)數(shù)
                  int n=length;
                  
                  
          // 當(dāng)前輪到的下標(biāo)
                  int currentIndex=interval;
                  
                  
          // 當(dāng)前節(jié)點(diǎn)
                  Node currentNode=first;
                  
                  
          // 輪圈退出直到剩下最后一個(gè)人
                  while(n>1)
                      
          // 經(jīng)過一個(gè)未推出節(jié)點(diǎn)即下標(biāo)減一
                      if(currentNode.isQuited==false){                  
                          currentIndex
          --;                
                      }
            
                      
                      
          // 走向下一個(gè)節(jié)點(diǎn)
                      currentNode=currentNode.next;
                      
                      
          // 當(dāng)下標(biāo)為0及當(dāng)前節(jié)點(diǎn)未退出時(shí)讓其退出
                      if(currentIndex==0 && currentNode.isQuited==false){
                          currentNode.isQuited
          =true
                          System.out.println(currentNode.name
          +"退出");
                          n
          --;    
                          currentIndex
          =interval;   
                      }

                  }

                  
                  
          // 找出最后一個(gè)幸存者
                  currentNode=first;
                  
          while(true){
                      
          if(currentNode.isQuited==false){
                          System.out.println(currentNode.name
          +"是最后的幸存者");
                          
          break;
                      }

                      
          else{
                          currentNode
          =currentNode.next;
                      }

                  }

              }

              
              
          /**
               * 顯示鏈表元素
               *
               
          */

              
          public void display(){
                  System.out.print(
          "鏈表元素有");
                  Node curr
          =first;
                  
          int n=length;
                  
                  
          while(n>0){
                      System.out.print(curr.name
          +"-("+curr.isQuited+"");
                      curr
          =curr.next;
                      n
          --;
                  }

                  System.out.println();
              }

              
              
          /**
               * 添加一個(gè)數(shù)組組成環(huán)形鏈表
               * 
          @param arr
               
          */

              
          public void addArray(String[] arr){
                  length
          =arr.length;
                  
          for(String t:arr){
                      addTail(t);
                  }

                  
                  
                  Node curr
          =first;
                  
                  
          while(curr.next!=null){
                      curr
          =curr.next;
                  }

                  
          // 將最后一個(gè)節(jié)點(diǎn)的指針指向頭節(jié)點(diǎn)形成環(huán)形鏈表
                  curr.next=first;
              }

              
              
          /**
               * 在鏈表尾部添加節(jié)點(diǎn)
               * 
          @param t
               
          */

              
          public void addTail(String t){
                  Node newNode
          =new Node();
                  newNode.name
          =t;
                  
                  
          if(first==null){                        
                      first
          =newNode;
                  }

                  
          else{
                      Node curr
          =first;
                      
                      
          while(curr.next!=null){
                          curr
          =curr.next;
                      }

                      
                      curr.next
          =newNode;
                  }

              }

              
              
          public static void main(String[] args){
                  CircleChainList ls
          =new CircleChainList();
                  
                  String[] arr
          ={"1","2","3","4","5","6","7","8"};
                  ls.addArray(arr);
                  ls.wheelOut(
          2);
              }

          }

          posted on 2008-07-05 09:14 sitinspring 閱讀(438) 評(píng)論(0)  編輯  收藏 所屬分類: 算法數(shù)據(jù)結(jié)構(gòu)

          sitinspring(http://www.aygfsteel.com)原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處.
          主站蜘蛛池模板: 玛多县| 师宗县| 唐海县| 小金县| 石首市| 荆州市| 山东| 东乡县| 聂拉木县| 襄垣县| 武胜县| 墨竹工卡县| 开化县| 清丰县| 肇庆市| 醴陵市| 泸定县| 盐边县| 同心县| 五莲县| 泰宁县| 南和县| 江口县| 光山县| 汾西县| 崇信县| 江安县| 上栗县| 乌恰县| 鄢陵县| 嘉义市| 建水县| 饶河县| 寻甸| 贡嘎县| 板桥市| 西盟| 昔阳县| 宁德市| 淄博市| 泌阳县|