protected override bool ModificarEn(int prmIndice, Tipo prmItem)
 {
     if (EstaVacia())
     {
         if (prmIndice == 0)
         {
             atrNodoPrimero.ponerItem(prmItem);
             return(true);
         }
         if (prmIndice == atrLongitud - 1)
         {
             atrNodoUltimo.ponerItem(prmItem);
             return(true);
         }
         if (EsValido(prmIndice))
         {
             clsNodoDobleEnlazado <Tipo> varNodoActual = atrNodoPrimero;
             for (int VarIndice = 1; VarIndice <= prmIndice; VarIndice++)
             {
                 varNodoActual = varNodoActual.darSiguiente();
             }
             varNodoActual.ponerItem(prmItem);
             return(true);
         }
     }
     return(false);
 }
示例#2
0
 protected override bool Avanzar()
 {
     atrIndiceActual++;
     atrNodoActual = atrNodoActual.darSiguiente();
     atrItemActual = atrNodoActual.darItem();
     return(true);
 }
 protected override bool RecuperarEn(int prmIndice, ref Tipo prmItem)
 {
     if (!EstaVacia())
     {
         #region recuperar en 0
         if (prmIndice == 0)
         {
             prmItem = atrNodoPrimero.darItem();
             return(true);
         }
         #endregion
         #region recuperar en longitud
         if (prmIndice == atrLongitud - 1)
         {
             prmItem = atrNodoUltimo.darItem();
             return(true);
         }
         #endregion
         #region recuperar en n posicion
         if (EsValido(prmIndice))
         {
             clsNodoDobleEnlazado <Tipo> varNodoRecuperado = atrNodoPrimero;
             for (int varIndice = 1; varIndice <= prmIndice; varIndice++)
             {
                 varNodoRecuperado = varNodoRecuperado.darSiguiente();
             }
             prmItem = varNodoRecuperado.darItem();
             return(true);
         }
         #endregion
     }
     return(false);
 }
示例#4
0
 protected override bool Retroceder()
 {
     atrIndiceActual--;
     atrNodoActual = atrNodoActual.darAnterior();
     atrItemActual = atrNodoActual.darItem();
     return(true);
 }
示例#5
0
 protected override bool IrUltimo()
 {
     if (!EstaVacia())
     {
         atrIndiceActual = atrLongitud - 1;
         atrNodoActual   = atrNodoUltimo;
         atrItemActual   = atrNodoActual.darItem();
         return(true);
     }
     return(false);
 }
示例#6
0
 protected override bool IrPrimero()
 {
     if (!EstaVacia())
     {
         atrIndiceActual = 0;
         atrNodoActual   = atrNodoPrimero;
         atrItemActual   = atrNodoActual.darItem();
         return(true);
     }
     return(false);
 }
 protected override bool ExtraerEn(int prmIndice, ref Tipo prmItem)
 {
     if (!EstaVacia())
     {
         #region extraer en 0
         if (prmIndice == 0)
         {
             prmItem = atrNodoPrimero.darItem();
             if (atrLongitud == 1)
             {
                 atrNodoPrimero = null;
                 atrNodoUltimo  = null;
                 atrLongitud--;
                 return(true);
             }
             atrNodoPrimero = atrNodoPrimero.darSiguiente();
             atrNodoPrimero.ponerAnterior(null);
             atrLongitud--;
             return(true);
         }
         #endregion
         #region Extraer en longitud
         if (prmIndice == atrLongitud - 1)
         {
             prmItem       = atrNodoUltimo.darItem();
             atrNodoUltimo = atrNodoUltimo.darAnterior();
             atrNodoUltimo.ponerSiguiente(null);
             atrLongitud--;
             return(true);
         }
         #endregion
         #region extraer en n posicion
         if (EsValido(prmIndice))
         {
             clsNodoDobleEnlazado <Tipo> varNodoExtraido = atrNodoPrimero;
             for (int varIndice = 1; varIndice < prmIndice; varIndice++)
             {
                 varNodoExtraido = varNodoExtraido.darSiguiente();
             }
             prmItem = varNodoExtraido.darItem();
             varNodoExtraido.darSiguiente().ponerAnterior(varNodoExtraido.darAnterior());
             varNodoExtraido.darAnterior().ponerSiguiente(varNodoExtraido.darSiguiente());
             varNodoExtraido.ponerSiguiente(null);
             varNodoExtraido.ponerAnterior(null);
             atrLongitud--;
             GC.Collect();
             return(true);
         }
         #endregion
     }
     return(false);
 }
        protected override bool InsertarEn(int prmIndice, Tipo prmItem)
        {
            clsNodoDobleEnlazado <Tipo> varNodoNuevo = new clsNodoDobleEnlazado <Tipo>(prmItem);

            #region Insertar el primer elemento
            if (EstaVacia())
            {
                atrNodoPrimero = varNodoNuevo;
                atrNodoUltimo  = atrNodoPrimero;
                atrNodoUltimo.ponerAnterior(atrNodoPrimero);
                atrNodoPrimero.ponerSiguiente(atrNodoUltimo);
                atrLongitud++;
                return(true);
            }
            #endregion
            #region Insertar en la primera posicion
            if (prmIndice == 0)
            {
                varNodoNuevo.ponerSiguiente(atrNodoPrimero);
                atrNodoPrimero.ponerAnterior(varNodoNuevo);
                atrNodoPrimero = varNodoNuevo;
                atrLongitud++;
                return(true);
            }
            #endregion
            #region Insertar en la ultima posicion
            if (prmIndice == atrLongitud)
            {
                atrNodoUltimo.ponerSiguiente(varNodoNuevo);
                varNodoNuevo.ponerAnterior(atrNodoUltimo);
                atrNodoUltimo = varNodoNuevo;
                atrLongitud++;
                return(true);
            }
            #endregion
            #region Insertar en cualquier posicion
            if (EsValido(prmIndice))
            {
                clsNodoDobleEnlazado <Tipo> varNodoActual = atrNodoPrimero;
                for (int varIndice = 1; varIndice < prmIndice - 1; varIndice++)
                {
                    varNodoActual = varNodoActual.darSiguiente();
                }
                varNodoNuevo.ponerSiguiente(varNodoActual.darSiguiente());
                varNodoNuevo.ponerAnterior(varNodoActual);
                varNodoActual.ponerSiguiente(varNodoNuevo);
                atrLongitud++;
                return(true);
            }
            #endregion
            return(false);
        }
示例#9
0
        protected override bool InsertarEn(int prmIndice, Tipo prmItem)
        {
            clsNodoDobleEnlazado <Tipo> varNodoNuevo = new clsNodoDobleEnlazado <Tipo>(prmItem);

            if (EstaVacia())
            {
                atrNodoPrimero = varNodoNuevo;
                atrNodoUltimo  = varNodoNuevo;
                atrNodoPrimero.ponerSiguiente(atrNodoUltimo);
                atrNodoUltimo.ponerAnterior(atrNodoPrimero);
                atrLongitud++;
                return(true);
            }
            if (prmIndice == 0)
            {
                varNodoNuevo.ponerSiguiente(atrNodoPrimero);
                atrNodoPrimero.ponerAnterior(varNodoNuevo);
                atrNodoPrimero = varNodoNuevo;
                atrLongitud++;
                return(true);
            }
            if (prmIndice == atrLongitud)
            {
                //atrNodoUltimo.ponerSiguiente(varNodoNuevo);
                //varNodoNuevo.ponerAnterior(atrNodoUltimo);
                atrNodoUltimo.ConectarSiguiente(varNodoNuevo);
                atrNodoUltimo = varNodoNuevo;
                atrLongitud++;
                return(true);
            }
            if (IrIndice(prmIndice - 1))
            {
                //varNodoNuevo.ponerSiguiente(atrNodoActual);
                //varNodoNuevo.ponerAnterior(atrNodoActual.darAnterior());
                //atrNodoActual.darAnterior().ponerSiguiente(varNodoNuevo);
                //atrNodoActual.ponerAnterior(varNodoNuevo);
                atrNodoActual.ConectarSiguiente(varNodoNuevo);
                atrLongitud++;
                return(true);
            }
            return(false);
        }
 protected override bool ExtraerEn(int prmIndice, ref Tipo prmItem)
 {
     if (EsValido(prmIndice))
     {
         clsNodoDobleEnlazado <Tipo> varNodoExtraido = atrNodoPrimero;
         for (int varIndice = 1; varIndice <= prmIndice; varIndice++)
         {
             varNodoExtraido = varNodoExtraido.darSiguiente();
         }
         prmItem = varNodoExtraido.darItem();
         varNodoExtraido.darAnterior().ponerSiguiente(varNodoExtraido.darSiguiente());
         varNodoExtraido.darSiguiente().ponerAnterior(varNodoExtraido.darAnterior());
         varNodoExtraido.ponerAnterior(null);
         varNodoExtraido.ponerSiguiente(null);
         varNodoExtraido = null;
         atrLongitud--;
         return(true);
     }
     return(false);
 }
示例#11
0
        protected override bool ExtraerEn(int prmIndice, ref Tipo prmItem)
        {
            clsNodoDobleEnlazado <Tipo> varNodoNuevo;

            if (IrIndice(prmIndice))
            {
                prmItem = atrItemActual;
                if (atrLongitud - 1 == 0)
                {
                    atrNodoPrimero = null;
                    atrNodoUltimo  = null;
                    atrLongitud--;
                    return(true);
                }
                if (prmIndice == 0)
                {
                    varNodoNuevo = this.atrNodoActual.darSiguiente();
                    varNodoNuevo.ponerAnterior(null);
                    this.atrNodoActual = varNodoNuevo;
                    atrNodoPrimero     = varNodoNuevo;
                    atrLongitud--;
                    return(true);
                }
                if (prmIndice == atrLongitud - 1)
                {
                    varNodoNuevo  = atrNodoActual.darAnterior();
                    atrNodoUltimo = varNodoNuevo;
                    atrNodoActual = varNodoNuevo;
                    atrLongitud--;
                    return(true);
                }
                varNodoNuevo = atrNodoActual.darSiguiente();
                atrNodoActual.ponerSiguiente(varNodoNuevo);
                varNodoNuevo.darSiguiente().ponerAnterior(atrNodoActual);
                varNodoNuevo.ponerSiguiente(null);
                varNodoNuevo.ponerAnterior(null);
                atrLongitud--;
                return(true);
            }
            return(false);
        }
示例#12
0
 protected override bool IntercambiarEntre(int prmIndice1, int prmIndice2)
 {
     if (EsValido(prmIndice1) && EsValido(prmIndice2))
     {
         if (prmIndice1 != prmIndice2)
         {
             IrIndice(prmIndice1);
             clsNodoDobleEnlazado <Tipo> varNodoIndice1 = atrNodoActual;
             IrIndice(prmIndice2);
             clsNodoDobleEnlazado <Tipo> varNodoIndice2 = atrNodoActual;
             if (varNodoIndice1 != null && varNodoIndice2 != null)
             {
                 Tipo varItemIndice1 = varNodoIndice1.darItem();
                 varNodoIndice1.ponerItem(varNodoIndice2.darItem());
                 varNodoIndice2.ponerItem(varItemIndice1);
                 return(true);
             }
         }
     }
     return(false);
 }
        protected override bool InsertarEn(int prmIndice, Tipo prmItem)
        {
            clsNodoDobleEnlazado <Tipo> varNodoNuevo = new clsNodoDobleEnlazado <Tipo>(prmItem);

            if (EstaVacia())
            {
                atrNodoPrimero = varNodoNuevo;
                atrNodoUltimo  = varNodoNuevo;
                atrNodoPrimero.ponerSiguiente(atrNodoUltimo);
                atrNodoUltimo.ponerAnterior(atrNodoPrimero);
                atrLongitud++;
                return(true);
            }
            if (prmIndice == 0)
            {
                varNodoNuevo.ponerSiguiente(atrNodoPrimero);
                atrNodoPrimero.ponerAnterior(varNodoNuevo);
                atrNodoPrimero = varNodoNuevo;
                atrLongitud++;
                return(true);
            }
            if (EsValido(prmIndice))
            {
                clsNodoDobleEnlazado <Tipo> varNodoActual = atrNodoPrimero;
                for (int varIndice = 1; varIndice < prmIndice; varIndice++)
                {
                    varNodoActual = varNodoActual.darSiguiente();
                }
                varNodoNuevo.ponerSiguiente(varNodoActual);
                varNodoNuevo.ponerAnterior(varNodoActual.darSiguiente());
                varNodoActual.darAnterior().ponerSiguiente(varNodoNuevo);
                varNodoActual.ponerAnterior(varNodoNuevo);
                atrLongitud++;
                return(true);
            }
            return(false);
        }
 protected override bool ModificarEn(int prmIndice, Tipo prmItem)
 {
     if (!EstaVacia())
     {
         #region modificar en 0
         if (prmIndice == 0)
         {
             atrNodoPrimero.ponerItem(prmItem);
             if (atrLongitud == 1)
             {
                 atrNodoUltimo = atrNodoPrimero;
             }
             return(true);
         }
         #endregion
         #region modificar en longitud
         if (prmIndice == atrLongitud - 1)
         {
             atrNodoUltimo.ponerItem(prmItem);
             return(true);
         }
         #endregion
         #region modificar en n posicion
         if (EsValido(prmIndice))
         {
             clsNodoDobleEnlazado <Tipo> varNodoModificado = atrNodoPrimero;
             for (int varIndice = 1; varIndice <= prmIndice; varIndice++)
             {
                 varNodoModificado = varNodoModificado.darSiguiente();
             }
             varNodoModificado.ponerItem(prmItem);
             return(true);
         }
         #endregion
     }
     return(false);
 }