lista circular (ingresando datos)

Iniciado por Micah Genji, 10 Noviembre 2010, 07:09 AM

0 Miembros y 1 Visitante están viendo este tema.

Micah Genji

Holas  :D

Bueno explico: tengo desarrollado el metodo de insercion en una lista circular, aunque lo desarrolle segun la teoria de esta accion (ingresar)

Veamos:
Código (csharp) [Seleccionar]
static nodo insertar(nodo lista, int n)
        {
            nodo nuevo = new nodo();
            nuevo.nro = n;
            if (lista == null)
            {
                lista = nuevo;
                lista.sgte = nuevo;
            }
            else
            {
                nuevo.sgte = lista.sgte;
                lista.sgte = nuevo;
            }
            return lista;
        }

Y bueno mi metodo mostrar que va asi:
Código (csharp) [Seleccionar]
static void mostrar(nodo lista)
        {
            nodo aux = lista;
            if (lista == null) Console.Write("Lista vacia !!!");
            else
            {
                do
                {
                    Console.Write(aux.nro + " ");
                    aux = aux.sgte;
                } while (aux != lista);
            }
            Console.ReadLine();
        }


Bien el detalle, es que este muestra de manera incorrecta.
Pero estuve realizando pruebas de escritorio y mi error esta en ingresar sobre todo en el "else", solo que no puedo implementarlo correctamente.

Por ejemplo: ingreso -> 1 2 3 4
entonce muestra: Lista: 1 4 3 2

Alguna idea, recomendacion de hacerlo.

Gracias  :)
Only two things are infinite, the universe and human stupidity, and I'm not sure about the former : A.E

.::IT::.

Micah Genji voz podrias poner el codigo de la clase "nodo" o de ser posible todo tu proyecto para ver mejor donde esta el error!!!!
Simplemente .::IT::.

ignorantev1.1

Código (vbnet) [Seleccionar]
static nodo insertar(nodo lista, int n)
        {
            nodo nuevo = new nodo();
            nuevo.nro = n;
            if (lista == null)
            {
                lista = nuevo;
                lista.sgte = nuevo;
            }
            else
            {
                nodo aux;
                aux=lista.sgte; /* No se apuntar! sorry /*
                whiele(aux!=lista){
                        aux=aux.sgte; /*insisto, no se utilizar punteros aqui*/
                }
                aux.sgte=nuevo;
                nuevo.sgte = lista;/*es logico por que siempre el ultimo elemento se enlazara al primero*/
            }
            return lista;
        }


Un nodo auxiliar que atravez de un bucle recorra los elementos, hasta que encuentre el elemento que en "sgte" contenga "lista" haces la insercion.

No se nada de .NET, entre aqui por que llevo horas sin tener nada que hacer, si estoy mal en la sintaxis no me regañen por favor  :-[, corrijanme :xD


Lunfardo

en la listas circulares es mas facil guardar un "puntero" al primero y un "puntero" al ultimo nodo, el siguiente del ultimo tiene que apuntar al primero.

asi se facil  ;D

Micah Genji

bueno gracias por su interes en este pequeño problema.
estuve verificando la sugerencia de ignorantev1.1; en:
Código (csharp) [Seleccionar]
aux = lista.sgte creo
bien creo ahora veo por que no usaba while primero.
en fin el algoritmo sigue erroneo.
revise con la prueba de escritorio y siempre el nuevo nodo termina siendo el segundo nodo de la lista:
Código (csharp) [Seleccionar]
aux.sgte = nuevo;
nuevo.sgte = lista;


por lo que veo el aux avanza hasta llegar  a la misma lista, y crea el paradigma de todo este problema.

con la sugerencia de ignorantev1.1 termina asi:
lista: 1 2 3 4
entonces muestra asi: 1 4

bien hasta ahora el algoritmo anteriormente planteado sigue siendo valido dado a q muestra los numeros ingresados.

bueno a seguir observando este paradigma  :rolleyes:

a bueno la clase nodo solo es una enlazada simple:
Código (csharp) [Seleccionar]
public class nodo
    {
        public int nro;
        public nodo sgte;
    }


saludos
Only two things are infinite, the universe and human stupidity, and I'm not sure about the former : A.E