Título: Estructura de datos. Listas simplemente enlazadas-Flavio josefo Publicado por: carepapa en 8 Septiembre 2011, 05:16 am Hola a todos. Aca les dejo un aporte que hice de estructura de datos. Este es el famoso juego de flavio josefo pero con listas, me rompi la cabeza casi una semanita y espero que les sirva un poco para entender este tema. Alguna cosa me dicen y les trato de resolver las dudas.
Son 3 clases, una clase nodo otra es la clase lista y la clase principal. Código: public class Nodo { int dato; Nodo siguiente; public Nodo(){ this.dato=0; siguiente=null; } public Nodo(int n){ this.dato=n; siguiente=null; } } Código: import javax.swing.JOptionPane; public class Lista { public Nodo cabeza; public Lista(){ this.cabeza=null; } public void insertarFinal(int info){ Nodo indice; indice=cabeza; if(indice==null){ cabeza= new Nodo(info); } else{ while(indice.siguiente!=null){ indice=indice.siguiente; } indice.siguiente=new Nodo(info); } } public void insertarInicio(int info){ //porque recibe el valor que va dentro del nodo Nodo a= new Nodo(info); a.siguiente=cabeza; cabeza=a; a=null; } public void eliminarCabeza(){ Nodo aux; aux=cabeza; cabeza=cabeza.siguiente; aux.siguiente=null; } public void Mostrar(){ Nodo indice; indice=cabeza; while(indice!=null){ System.out.print("\n"+indice.dato); indice=indice.siguiente; } } } Código: import javax.swing.*; public class Principal { public static void main(String[] args) { int k, contk = 0, n, soldvivo; Lista miLista = new Lista(); Nodo ind1; Nodo ind2; Nodo cabeza; n = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el número de soldados")); k = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el número de la muerte")); for (int i = 0; i < n; i++) { miLista.insertarFinal(i + 1); } soldvivo = n; cabeza = miLista.cabeza; ind1 = cabeza; ind2 = cabeza; if (k == 1) { while (soldvivo > 1) { miLista.eliminarCabeza(); soldvivo--; } } else { while (soldvivo > 1) { contk++; if (contk == k) { if (ind1 == cabeza) { cabeza = cabeza.siguiente; ind1.siguiente = null; ind1 = cabeza; ind2 = cabeza; contk = 1; } else { while (ind2.siguiente != ind1) { ind2 = ind2.siguiente; } if (ind1.siguiente == null) { ind2.siguiente = null; ind1 = ind2; contk = 0; } else { ind2.siguiente = ind1.siguiente; ind1.siguiente = null; ind1 = ind2; contk = 0; } } soldvivo--; } if (soldvivo != 1) { ind1 = ind1.siguiente; if (ind1.siguiente == null) { contk++; if (contk == k) { while (ind2.siguiente != ind1) { ind2 = ind2.siguiente; } ind2.siguiente = null; soldvivo--; contk = 0; } ind1 = cabeza; ind2 = cabeza; } } } } System.out.print(cabeza.dato); } } |