Example #1
0
 // Método público que recibe un Nodo para buscarlo en la lista doble
 public Tipo Buscar(Tipo Nodo)
 {
     if (!EstaVacia())
     {
         ClaseNodo NodoActual = new ClaseNodo();
         // Empieza el recorrido en el NodoInicial
         NodoActual = NodoInicial;
         while (NodoActual != null)
         {
             if
             (NodoActual.ObjetoConDatos.Equals(Nodo))
             {
                 return
                     (NodoActual.ObjetoConDatos); // Devuelve los datos del nodo
             }
             NodoActual = NodoActual.Siguiente;
             // Cambia al siguiente nodo
         }
         // Termina el recorrido y no localiza el nodo
         return(default(Tipo));
     }
     else
     {
         return(default(Tipo));  // No se encuentra el nodo(Lista doble vacía)
     }
 }
Example #2
0
        public Tipo Eliminar(Tipo Nodo)
        {
            ClaseNodo NodoActual, NodoAnterior;

            if (EstaVacia())
            {
                return(default(Tipo));
            }
            //return throw new Exception("Vacia...");
            NodoActual   = NodoInicial;
            NodoAnterior = NodoInicial; // Guarda el NodoAnterior
            do
            {
                if (Nodo.Equals(NodoActual.ObjetoConDatos)) // Verifica si es el Nodo que desea borrar
                {
                    // Eliminación del primer nodo de la lista
                    if (Nodo.Equals(NodoInicial.ObjetoConDatos))     // ¿Es elprimer nodo de la lista ?
                    {
                        NodoInicial          = NodoActual.Siguiente; // El NodoInicial ahora es al queapunta el NodoActual
                        NodoActual.Siguiente = null;                 //Se eliminael Nodo Actual
                        return(NodoActual.ObjetoConDatos);           // Eliminación exitosa(devuelve los datos del nodo eliminado)
                    }
                    else
                    {
                        // Eliminación de un nodointermedio o el ultimo nodo de la lista
                        NodoAnterior.Siguiente = NodoActual.Siguiente; // El NodoAnterior apunta alsiguiente nodo del actual
                        NodoActual.Siguiente   = null;                 //Se eliminael Nodo Actual
                        return(NodoActual.ObjetoConDatos);             // Eliminación exitosa(devuelve los datos del nodo eliminado)
                    }
                }
                NodoAnterior = NodoActual;           // Guarda el NodoAnterior
                NodoActual   = NodoActual.Siguiente; //Cambia de NodoActual
            } while (NodoActual != null);
            throw new Exception("No se encuentra ...");
        }
Example #3
0
        public void Insertar(Tipo Nodo)
        {
            ClaseNodo NuevoNodo, NodoActual, NodoAnterior;

            if (EstaVacia())
            {
                NuevoNodo = new ClaseNodo();     //Creacióndel nuevo nodo
                NuevoNodo.ObjetoConDatos = Nodo; //Asignación de los datos del Nodo
                NuevoNodo.Siguiente      = null; // ElNuevoNodo apunta a nulo
                NodoInicial = NuevoNodo;         // Ahora elNuevoNodo es el NodoInicial
                return;                          // Inserción exitosa
            }
            // Recorrido de la Lista
            NodoActual   = NodoInicial; // Inicializa elrecorrido en el NodoInicial
            NodoAnterior = NodoInicial; // Guarda elNodoAnterior
            do
            {
                // Comparación para verificar duplicado
                if (NodoActual.ObjetoConDatos.CompareTo(Nodo) == 0)
                {
                    throw new Exception("Duplicado..."); // No se inserta el dato (duplicado)
                }
                if (Nodo.CompareTo(NodoActual.ObjetoConDatos) < 0)
                {
                    // Alta al principio de la Lista
                    if (Nodo.CompareTo(NodoInicial.ObjetoConDatos) < 0)
                    {
                        NuevoNodo = new ClaseNodo();
                        //Creación del nuevo nodo
                        NuevoNodo.ObjetoConDatos = Nodo;        // Asignación de los datos del Nodo
                        NuevoNodo.Siguiente      = NodoInicial; // El NuevoNodo apunta al NodoInicial
                        NodoInicial = NuevoNodo;                //Ahora el NodoInicial es el NuevoNodo
                        return;                                 // Inserción exitosa
                    }
                    else
                    {
                        // Alta de un Dato intermedioen la Lista
                        NuevoNodo = new ClaseNodo();
                        //Creación del nuevo nodo
                        NuevoNodo.ObjetoConDatos = Nodo;                   // Asignación de los datos del Nodo
                        NuevoNodo.Siguiente      = NodoAnterior.Siguiente; // El NuevoNodo apunta alNodoAnterior
                        NodoAnterior.Siguiente   = NuevoNodo;              // El NodoAnterior apunta al NuevoNodo
                        return;                                            // Inserción exitosa
                    }
                }
                NodoAnterior = NodoActual;           // Guardael NodoAnterior
                NodoActual   = NodoActual.Siguiente; //Se mueve al siguiente nodo del NodoActual
            } while (NodoActual != null);            // Repetir mientras no se encuentre el final de la Lista
                                                     // Alta de un Dato al final de la Lista
            NuevoNodo = new ClaseNodo();             //Creación delnuevo nodo
            NuevoNodo.ObjetoConDatos = Nodo;         //Asignación de los datos del Nodo
            NuevoNodo.Siguiente      = null;         // El NuevoNodo no apunta a nada(es el último de la lista)
            NodoAnterior.Siguiente   = NuevoNodo;    // ElNodoAnterior apunta al NuevoNodo
            return;                                  // Inserción exitosa
        }
Example #4
0
 public Tipo Buscar(Tipo Nodo)
 {
     if (!EstaVacia())
     {
         ClaseNodo NodoActual = NodoInicial;
         while (NodoActual != null)                      // Mientrasno encuentra el final de la lista
         {
             if (Nodo.Equals(NodoActual.ObjetoConDatos)) // ¿Es el nodo deseado ?
             {
                 return(NodoActual.ObjetoConDatos);      // Búsqueda exitosa (devuelve los datos del nodo buscado)
             }
             NodoActual = NodoActual.Siguiente;          // Cambia de NodoActual
         }
         return(default);                                // Terminó elrecorrido y no se encuentra el dato
Example #5
0
        public IEnumerator <Tipo> GetEnumerator()
        {
            if (EstaVacia())
            {
                yield break;
            }
            ClaseNodo NodoActual = new ClaseNodo();

            // Inicia el recorrido de la lista en el NodoInicial
            NodoActual = NodoInicial;
            while (NodoActual != null)                         // Mientras haya nodos ...
            {
                yield return((Tipo)NodoActual.ObjetoConDatos); // Devuelve los datos del NodoActual

                NodoActual = NodoActual.Siguiente;             //Cambia de NodoActual
            }
        }
Example #6
0
 // Método para eliminar todos los nodos de la Lista Doble
 public void Vaciar()
 {
     if (!EstaVacia())
     {
         // Inicializa el NodoActual al principio de la lista doble y declara el NodoAnterior
         ClaseNodo NodoActual = NodoInicial,
                   NodoAnterior;
         // Recorre la lista doble en forma ascendente
         while (NodoActual != null)     // Mientras no encuentra el final de la lista doble
         {
             NodoAnterior = NodoActual; //Guarda el NodoAnterior
             NodoActual   = NodoActual.Siguiente;
             // Cambia de NodoActual
             NodoAnterior = null; // Elimina el NodoAnterior
         }
         NodoInicial = null;      // Inicializa la lista doble vacía
         NodoFinal   = null;
     }
 }
Example #7
0
 // Método para eliminar todos los nodos de la Lista Enlazada Simple
 public void Vaciar()
 {
     if (!EstaVacia()) // Si no está vacía
     {
         // Inicializa el NodoActual al principio de la lista y declara el NodoAnterior
         ClaseNodo NodoActual = NodoInicial, NodoAnterior;
         // Recorre la lista
         while (NodoActual != null)     // Mientras no encuentra el final de la lista
         {
             NodoAnterior = NodoActual; // Guarda el NodoAnterior
             NodoActual   = NodoActual.Siguiente;
             // Cambia de NodoActual
             NodoAnterior.Siguiente = null; // Elimina el NodoAnterior
         }
         NodoInicial = null;                // Inicializa la lista vacía
     }
     else
     {
         throw new Exception("Vacía ..."); // Error: la lista está vacía
     }
 }
Example #8
0
 // Método para buscar un Nodo en la Lista Enlazada Simple
 public Tipo Buscar(Tipo Nodo)
 {
     if (!EstaVacia())                                   // Si no está vacía ...
     {
         ClaseNodo NodoActual = NodoInicial;             // Inicializa el NodoActual al principio de la lista
                                                         // Recorrido de la lista
         while (NodoActual != null)                      // Mientras no encuentra el final de la lista
         {
             if (Nodo.Equals(NodoActual.ObjetoConDatos)) // ¿Es el nodo deseado ?
             {
                 return
                     (NodoActual.ObjetoConDatos); // Búsqueda exitosa (devuelve los datos del nodo buscado)
             }
             NodoActual = NodoActual.Siguiente;   // Cambia de NodoActual
         }
         return(default(Tipo));                   // Terminó el recorrido y no se encuentra el dato
     }
     else
     {
         return(default(Tipo));  // No se encuentra el dato(lista simple vacía)
     }
 }
Example #9
0
        //Método para eliminar un dato
        public Tipo Eliminar(Tipo Nodo)
        {
            // Declaración de los nodos
            ClaseNodo NodoActual, NodoAnterior, NodoEliminado;

            if (EstaVacia()) // Si está vacía ...
            {
                throw new Exception("Vacía ...");
            }
            // Inicializa el recorrido de la lista
            NodoActual   = NodoInicial;
            NodoAnterior = NodoInicial; // Guarda el NodoAnterior
            do
            {
                if (Nodo.Equals(NodoActual.ObjetoConDatos)) // Verifica si es el Nodo que desea borrar
                {
                    /*NodoEliminado = new ClaseNodo();*/    // Crea un objeto
                    //NodoEliminado = NodoActual; // Guarda temporalmente los datos del nodo que se desea eliminar
                    // Eliminación del primer nodo dela lista
                    if (Nodo.Equals(NodoInicial.ObjetoConDatos))     // ¿Es el primer nodo de la lista ?
                    {
                        NodoInicial          = NodoActual.Siguiente; // El NodoInicial ahora es al que apunta el NodoActual
                        NodoActual.Siguiente = null;                 //Se elimina el Nodo Actual
                        return(NodoActual.ObjetoConDatos);           // Eliminación exitosa(devuelve los datos del nodo eliminado)
                    }
                    else
                    {
                        // Eliminación de un nodo intermedio o el ultimo nodo de la lista
                        NodoAnterior.Siguiente = NodoActual.Siguiente; // El NodoAnterior apunta al siguiente nodo del actual
                        NodoActual.Siguiente   = null;                 //Se elimina el Nodo Actual
                        return(NodoActual.ObjetoConDatos);             // Eliminación exitosa(devuelve los datos del nodo eliminado)
                    }
                }
                NodoAnterior = NodoActual;           // Guarda el NodoAnterior
                NodoActual   = NodoActual.Siguiente; // Cambia de NodoActual
            } while (NodoActual != null);
            throw new Exception("No se encuentra ...");
            // Error: no existe el nodo que se desea eliminar
        }
Example #10
0
 public void Vaciar()
 {
     if (!EstaVacia())
     {
         ClaseNodo NodoActual = NodoInicial;
         ClaseNodo NodoAnterior;
         // Recorre la lista
         while (NodoActual != null)     // Mientras no encuentra el final de la lista
         {
             NodoAnterior = NodoActual; //Guarda el NodoAnterior
             NodoActual   = NodoActual.Siguiente;
             // Cambia de NodoActual
             //NodoAnterior = null; // Elimina el NodoAnterior
             NodoAnterior.Siguiente = null;
         }
         NodoInicial = null; // Inicializa la lista vacía
     }
     else
     {
         throw new Exception("Vacía ...");
     }
 }
Example #11
0
 // Constructor de la ClaseListaSimple
 public ClaseListaSimpleOrdenada()
 {
     NodoInicial = null; // Inicializa la lista simple vacía
 }
Example #12
0
        // Método que recibe el Nodo que se desea insertar
        public void Insertar(Tipo Nodo)
        {
            // Declaración local de los nodos
            ClaseNodo NuevoNodo, NodoActual,
                      NodoAnterior;

            if (EstaVacia())                     // Si está vacía
            {
                NuevoNodo = new ClaseNodo();     //Creación del NuevoNodo
                NuevoNodo.ObjetoConDatos = Nodo; //Asignación del Nodo
                NuevoNodo.Anterior       = null;
                NuevoNodo.Siguiente      = null;
                NodoInicial = NuevoNodo; // El NuevoNodo es el NodoInicial
                NodoFinal   = NuevoNodo; // El NuevoNodo también es el NodoFinal
                return;                  // Inserción exitosa
            }
            NodoActual   = NodoInicial;
            NodoAnterior = NodoActual;
            while (NodoActual != null)
            {
                if
                (NodoActual.ObjetoConDatos.Equals(Nodo))
                {
                    throw new Exception("Duplicado...");
                }
                if (Nodo.CompareTo(NodoActual.ObjetoConDatos) < 0)
                {
                    if
                    (Nodo.CompareTo(NodoInicial.ObjetoConDatos) < 0) //Inserción al principio
                    {
                        NuevoNodo = new ClaseNodo();
                        NuevoNodo.ObjetoConDatos =
                            Nodo;
                        NuevoNodo.Anterior  = null;
                        NuevoNodo.Siguiente =
                            NodoInicial;
                        NodoInicial.Anterior =
                            NuevoNodo;
                        NodoInicial = NuevoNodo;
                        return;
                    }
                    else // Inserción intermedia
                    {
                        NuevoNodo = new ClaseNodo();
                        NuevoNodo.ObjetoConDatos =
                            Nodo;
                        NuevoNodo.Anterior =
                            NodoAnterior;
                        NuevoNodo.Siguiente =
                            NodoActual;
                        NodoAnterior.Siguiente =
                            NuevoNodo;
                        NodoActual.Anterior =
                            NuevoNodo;
                        return;
                    }
                }
                NodoAnterior = NodoActual;
                NodoActual   = NodoActual.Siguiente;
            }
            // Inserción al final
            NuevoNodo = new ClaseNodo();
            NuevoNodo.ObjetoConDatos = Nodo;
            NuevoNodo.Anterior       = NodoFinal;
            NuevoNodo.Siguiente      = null;
            NodoFinal.Siguiente      = NuevoNodo;
            NodoFinal = NuevoNodo;

            return;
        }
Example #13
0
 //Constructor
 public ClaseListaDobleOrdenada()
 {
     // Inicializa la lista doble vacía
     NodoInicial = null;
     NodoFinal   = null;
 }
Example #14
0
        public Tipo Eliminar(Tipo Nodo)
        {
            // Declaración local de los nodos
            ClaseNodo NodoActual, NodoAnterior;

            if (EstaVacia())           // Si está vacía ..
            {
                return(default(Tipo)); // Nodo inexistente(lista doble vacía)
            }
            // Inicia el recorrido de la lista doble
            NodoActual   = NodoInicial;
            NodoAnterior = NodoInicial;
            while (NodoActual != null)
            {
                if
                (NodoActual.ObjetoConDatos.Equals(Nodo)) // Si localiza el nodo...
                {
                    ClaseNodo NodoEliminado = new
                                              ClaseNodo();
                    NodoEliminado = NodoActual;
                    if (NodoInicial == NodoFinal) //Eliminación del único nodo
                    {
                        NodoInicial = null;
                        NodoFinal   = null;
                        NodoActual  = null;
                        return(NodoEliminado.ObjetoConDatos);
                    }
                    if (NodoActual == NodoInicial) //Eliminación al inicio
                    {
                        NodoInicial =
                            NodoActual.Siguiente;
                        NodoInicial.Anterior = null;
                        NodoActual           = null;
                        return
                            (NodoEliminado.ObjetoConDatos);
                    }

                    if (NodoActual == NodoFinal) //Eliminación al final
                    {
                        NodoFinal =
                            NodoActual.Anterior;
                        NodoFinal.Siguiente = null;
                        NodoActual          = null;
                        return
                            (NodoEliminado.ObjetoConDatos);
                    }
                    // Eliminación intermedia
                    NodoAnterior.Siguiente =
                        NodoActual.Siguiente;
                    NodoActual.Siguiente.Anterior =
                        NodoActual.Anterior;
                    NodoActual = null;
                    return
                        (NodoEliminado.ObjetoConDatos);
                }
                if
                (Nodo.CompareTo(NodoActual.ObjetoConDatos) < 0) // Si el nodo buscado es menor,
                {
                    return(default(Tipo));
                }
                // entonces no se encuentra
                NodoAnterior = NodoActual;           // Guarda el NodoAnterior
                NodoActual   = NodoActual.Siguiente; // Cambio de NodoActual
            }
            // Termina el recorrido de la lista doble y no se localiza el nodo(eliminación fallida)
            return(default(Tipo));
        }
Example #15
0
 public ListaSimple()
 {
     NodoInicial = null; // Inicializa la listasimple vacía
 }