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 Retroceder() { atrIndiceActual--; atrNodoActual = atrNodoActual.darAnterior(); atrItemActual = atrNodoActual.darItem(); return(true); }
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); }
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); }