Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Micah Genji en 10 Noviembre 2010, 07:09 am



Título: lista circular (ingresando datos)
Publicado por: Micah Genji en 10 Noviembre 2010, 07:09 am
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
  1. static nodo insertar(nodo lista, int n)
  2.        {
  3.            nodo nuevo = new nodo();
  4.            nuevo.nro = n;
  5.            if (lista == null)
  6.            {
  7.                lista = nuevo;
  8.                lista.sgte = nuevo;
  9.            }
  10.            else
  11.            {
  12.                nuevo.sgte = lista.sgte;
  13.                lista.sgte = nuevo;
  14.            }
  15.            return lista;
  16.        }
Y bueno mi metodo mostrar que va asi:
Código
  1. static void mostrar(nodo lista)
  2.        {
  3.            nodo aux = lista;
  4.            if (lista == null) Console.Write("Lista vacia !!!");
  5.            else
  6.            {
  7.                do
  8.                {
  9.                    Console.Write(aux.nro + " ");
  10.                    aux = aux.sgte;
  11.                } while (aux != lista);
  12.            }
  13.            Console.ReadLine();
  14.        }

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  :)


Título: Re: lista circular (ingresando datos)
Publicado por: .::IT::. en 11 Noviembre 2010, 05:41 am
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!!!!


Título: Re: lista circular (ingresando datos)
Publicado por: ignorantev1.1 en 11 Noviembre 2010, 06:00 am
Código
  1. static nodo insertar(nodo lista, int n)
  2.        {
  3.            nodo nuevo = new nodo();
  4.            nuevo.nro = n;
  5.            if (lista == null)
  6.            {
  7.                lista = nuevo;
  8.                lista.sgte = nuevo;
  9.            }
  10.            else
  11.            {
  12.                nodo aux;
  13.                aux=lista.sgte; /* No se apuntar! sorry /*
  14.                whiele(aux!=lista){
  15.                        aux=aux.sgte; /*insisto, no se utilizar punteros aqui*/
  16.                }
  17.                aux.sgte=nuevo;
  18.                nuevo.sgte = lista;/*es logico por que siempre el ultimo elemento se enlazara al primero*/
  19.            }
  20.            return lista;
  21.        }

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



Título: Re: lista circular (ingresando datos)
Publicado por: Lunfardo en 12 Noviembre 2010, 08:45 am
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


Título: Re: lista circular (ingresando datos)
Publicado por: Micah Genji en 15 Noviembre 2010, 05:14 am
bueno gracias por su interes en este pequeño problema.
estuve verificando la sugerencia de ignorantev1.1; en:
Código
  1. 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
  1. aux.sgte = nuevo;
  2. 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
  1. public class nodo
  2.    {
  3.        public int nro;
  4.        public nodo sgte;
  5.    }

saludos