elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Estructura de datos. Listas simplemente enlazadas-Flavio josefo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Estructura de datos. Listas simplemente enlazadas-Flavio josefo  (Leído 7,871 veces)
carepapa

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Estructura de datos. Listas simplemente enlazadas-Flavio josefo
« 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);
    }
}


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Listas enlazadas en c++
Programación C/C++
N3r0 3 8,787 Último mensaje 13 Julio 2010, 12:42 pm
por N3r0
listas simplemente enlazadas « 1 2 »
Programación C/C++
m@o_614 10 6,907 Último mensaje 8 Junio 2012, 07:28 am
por durasno
¿Cómo cargar datos desde un archivo .txt en listas ligadas/enlazadas?
Programación C/C++
Juancho25 7 15,208 Último mensaje 1 Mayo 2013, 23:00 pm
por Juancho25
[ESTRUCTURA DE DATOS] Listas doblemente ligadas [C++]
Programación C/C++
2Fac3R 2 3,222 Último mensaje 30 Julio 2015, 08:49 am
por Eternal Idol
Listas enlazadas (Eliminar nodos segun condicion de sus datos).
Programación C/C++
santycarp17 2 3,334 Último mensaje 9 Octubre 2017, 00:38 am
por santycarp17
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines