示例#1
0
 public Lista_Ligada()
 {
     //Instanciamos el ancla
     ancla = new Nodito();
     //Cómo es una lista vacía, su siguiente es null
     ancla.setSiguiente(null);
 }
示例#2
0
 /*
  * Encontrar el nodo anterior
  * Si esta en el primer nodo se regresa al ancla
  * Si el dato no existe se regresa el ultimo nodo
  */
 public Nodito getNoditoAnterior(int valor)
 {
     trabajo2 = ancla;
     while (trabajo2.getSiguiente() != null && trabajo2.getSiguiente().getDato() != valor)
     {
         trabajo2 = trabajo2.getSiguiente();
     }
     return(trabajo2);
 }
示例#3
0
        // Obtener el tamaño de elementos...
        public int getSize()
        {
            trabajo = ancla;
            int size = 0;

            while (trabajo.getSiguiente() != null)
            {
                trabajo = trabajo.getSiguiente();
                size++;
            }
            return(size);
        }
示例#4
0
        //Insertar valor al inicio
        public void insertarInicio(int valor)
        {
            Nodito dato = new Nodito();

            dato.setDato(valor);
            if (isEmpty())
            {
                Agregar(valor);
            }
            else
            {
                dato.setSiguiente(ancla.getSiguiente());
                ancla.setSiguiente(dato);
            }
        }
示例#5
0
 //Recorre toda la lista
 public void Transversa()
 {
     //Trabajo al Inicio
     trabajo = ancla;
     //Recorremos hasta encontrar el final
     while (trabajo.getSiguiente() != null)
     {
         //Avanzamos trabajo
         trabajo = trabajo.getSiguiente();
         //Obtenemos el dato y lo mostramos
         int d = trabajo.getDato();
         Console.Write("{0} -> ", d);
     }
     //Bajamos la linea
     Console.WriteLine();
 }
示例#6
0
 // Indexer ???
 public int?this[int indice]
 {
     get
     {
         trabajo = getIndiceNodito(indice);
         return(trabajo.getDato());
     }
     set
     {
         trabajo = getIndiceNodito(indice);
         if (trabajo != null)
         {
             trabajo.setDato(Convert.ToInt32(value));
         }
     }
 }
示例#7
0
        // Regresa el indice del Nodo
        public int getIndice(int valor)
        {
            int n = -1;

            trabajo = ancla;
            while (trabajo.getSiguiente() != null)
            {
                trabajo = trabajo.getSiguiente();
                n++;
                if (trabajo.getDato() == valor)
                {
                    return(n);
                }
            }
            return(-1);
        }
示例#8
0
        //Obtener el nodo que se encuentra en indice especificado
        public Nodito getIndiceNodito(int indice)
        {
            if (isEmpty() || indice > getSize())
            {
                return(ancla);
            }

            trabajo = ancla;
            int n = 0;

            while (trabajo.getSiguiente() != null && n != indice)
            {
                trabajo = trabajo.getSiguiente();
                n++;
            }
            return(trabajo);
        }
示例#9
0
        // Insertar un valor después de la primera ocurrencia del dato pasado a pDonde
        public void Insertar(int indiceInsercion, int valor)
        {
            // Encontramos la posición donde vamos a insertar
            trabajo = Buscar(indiceInsercion);
            if (trabajo == null)
            {
                return;
            }
            //Creamos el nodo temporal a insertar
            Nodito temporal = new Nodito();

            temporal.setDato(valor);
            //Conectamos el temporal a la lista
            temporal.setSiguiente(trabajo.getSiguiente());
            //Conectamos trabajo a temporal
            trabajo.setSiguiente(temporal);
        }
示例#10
0
 // Regresa el nodo con la primera ocurrencia del dato
 public Nodito Buscar(int valor)
 {
     if (isEmpty())
     {
         return(null);
     }
     trabajo2 = ancla;
     //Recorremos para ver si lo encontramos
     while (trabajo2.getSiguiente() != null)
     {
         trabajo2 = trabajo2.getSiguiente();
         //Al encontrarlo lo regresamos...
         if (trabajo2.getDato() == valor)
         {
             return(trabajo2);
         }
     }
     //No se encontró, regresamos null
     return(null);
 }
示例#11
0
        //Agregar nuevo elemento a la lista
        public void Agregar(int valor)
        {
            //Trabajo al Inicio
            trabajo = ancla;
            //Recorremos hasta encontrar el final
            while (trabajo.getSiguiente() != null)
            {
                //Avanzamos trabajo
                trabajo = trabajo.getSiguiente();
            }

            // Creamos el nuevo nodo
            Nodito temporal = new Nodito();

            //Insertemos el dato
            temporal.setDato(valor);
            //Finalizamos correctamente
            temporal.setSiguiente(null);
            //Ligamos el ultimo nodo encontrado con el recien creado
            trabajo.setSiguiente(temporal);
        }
示例#12
0
        //Borrar elemento de la lista
        public void borrarElemento(int valor)
        {
            //Verificamos que se tengan datos.
            if (isEmpty())
            {
                return;
            }
            // Buscamos los nodos con los que trabajaremos
            Nodito anterior   = getNoditoAnterior(valor);
            Nodito encontrado = Buscar(valor);

            // Si no hay nodo a borrar, salimos
            if (encontrado == null)
            {
                return;
            }
            //Brincamos el nodo
            anterior.setSiguiente(encontrado.getSiguiente());
            // Quitamos el actual de la lista.
            encontrado.setSiguiente(null);
        }
        static void Main(string[] args)
        {
            Lista_Ligada listita = new Lista_Ligada();

            listita.Agregar(3);
            listita.Agregar(5);
            listita.Agregar(7);
            listita.Agregar(9);
            listita.Agregar(11);
            listita.Agregar(15);
            listita.Transversa();
            Console.WriteLine(listita.isEmpty());

            //listita.Vaciar();
            //listita.Transversa();
            //Console.WriteLine(listita.isEmpty());

            listita.borrarElemento(7);
            listita.Transversa();
            listita.borrarElemento(3);
            listita.Transversa();
            listita.Insertar(11, 20);
            listita.Transversa();
            listita.Insertar(5, 7);
            listita.Transversa();
            listita.Insertar(7, 1000);
            listita.Insertar(3, 12);
            listita.Transversa();
            Console.WriteLine("-------------");
            Console.WriteLine("Insertar Inicio");
            listita.insertarInicio(9);
            listita.Transversa();
            listita.insertarInicio(84938);
            listita.insertarInicio(1010101);
            listita.Transversa();
            Console.WriteLine("-------------");
            Console.WriteLine("-------------");
            Console.WriteLine("Obtener Nodo por Indice");
            Nodito elemento = listita.getIndiceNodito(1);

            if (elemento.Equals(listita.ancla))
            {
                Console.WriteLine("Error Indice Fuera de Rango...");
            }
            else
            {
                Console.WriteLine(elemento);
            }
            Console.WriteLine("-------------");
            Nodito encontrado = listita.Buscar(15);

            Console.WriteLine(encontrado);

            int indice = listita.getIndice(97);

            if (indice != -1)
            {
                Console.WriteLine(indice);
            }
            Console.WriteLine("---Indexer---");
            listita.Transversa();
            Console.WriteLine(listita[3]);
            listita[3] = 66;
            listita.Transversa();
            Console.WriteLine("-------------");
        }
 internal void setSiguiente(Nodito value)
 {
     siguiente = value;
 }