コード例 #1
0
        public void Eliminar(int Indice)
        {
            if (Indice < 0)
            {
                throw new ArgumentOutOfRangeException("Indice: " + Indice);
            }
            if (this.Vacio)
            {
                //return null;
            }
            if (Indice >= this.Tamaño)
            {
                Indice = Tamaño - 1;
            }

            NodoDoble *Elimina;

            if (this.Cabeza == null)
            {
                Tamaño = 1;
            }
            else if (this.Cabeza->Siguiente == null)
            {
                Marshal.FreeHGlobal((IntPtr)Cabeza);
                this.Cabeza = null;
            }
            else if (Indice >= Tamaño)
            {
                NodoDoble *Final = this.Cabeza;

                while (Final->Siguiente->Siguiente != null)
                {
                    Final = Final->Siguiente;
                }
                Elimina          = Final->Siguiente;
                Final->Siguiente = null;

                Marshal.FreeHGlobal((IntPtr)Elimina);
                Elimina = null;
            }
            else
            {
                NodoDoble *Actual = this.Cabeza;

                for (int i = 0; i < Indice - 1; i++)
                {
                    Actual = Actual->Siguiente;
                }

                Elimina = Actual->Siguiente;
                Actual->Siguiente->Siguiente->Anterior = Actual;
                Actual->Siguiente = Actual->Siguiente->Siguiente;

                Marshal.FreeHGlobal((IntPtr)Elimina);
            }

            Tamaño--;
        }
コード例 #2
0
        public NodoDoble *RecorrerListaHaciaAtras()
        {
            NodoDoble *nTemp = UltimoElemento();

            while (nTemp->Anterior != null)
            {
                nTemp = nTemp->Anterior;
            }

            return(nTemp);
        }
コード例 #3
0
        public NodoDoble *UltimoElemento()
        {
            NodoDoble *nTemp = Cabeza;

            while (nTemp->Siguiente != null)
            {
                nTemp = nTemp->Siguiente;
            }

            return(nTemp);
        }
コード例 #4
0
        public Data Insertar(int Indice, Data dato)
        {
            if (Indice < 0)
            {
                throw new ArgumentOutOfRangeException("Indice: " + Indice);
            }
            if (Indice > Tamaño)
            {
                Indice = Tamaño;
            }

            NodoDoble *Actual = (NodoDoble *)Marshal.AllocHGlobal(sizeof(NodoDoble));

            Actual->Info   = dato;
            Actual->Ultimo = true;

            if (this.Vacio || Indice == 0)
            {
                this.Cabeza       = Actual;
                Actual->Siguiente = null;
                Actual->Anterior  = null;
            }
            else
            {
                NodoDoble *Final = this.Cabeza;
                NodoDoble *Temporal;
                while (Final->Siguiente != null)
                {
                    if (Indice == 1)
                    {
                        Final->Anterior = this.Cabeza;
                    }

                    Temporal        = Final;
                    Final           = Final->Siguiente;
                    Final->Anterior = Temporal;
                }

                Final->Ultimo = false;

                Final->Siguiente  = Actual;
                Actual->Siguiente = null;
                Actual->Anterior  = Final;
            }

            Tamaño++;

            return(dato);
        }
コード例 #5
0
        public int IndiceDe(Data dato)
        {
            NodoDoble *Actual = this.Cabeza;

            for (int i = 0; i < this.Tamaño; i++)
            {
                if (Actual->Info.Equals(dato))
                {
                    return(i);
                }
                Actual = Actual->Siguiente;
            }

            return(-1);
        }
コード例 #6
0
        public Data Obtener(int Indice)
        {
            if (Indice < 0)
            {
                throw new ArgumentOutOfRangeException("Indice: " + Indice);
            }
            if (this.Vacio)
            {
                // return null
            }
            if (Indice >= this.Tamaño)
            {
                Indice = this.Tamaño - 1;
            }

            NodoDoble *Actual = this.Cabeza;

            for (int i = 0; i < Indice; i++)
            {
                Actual = Actual->Siguiente;
            }
            return(Actual->Info);
        }
コード例 #7
0
 public void RecorrerLista()
 {
     NodoDoble *pFinal = UltimoElemento();
 }
コード例 #8
0
 public ListaDoblementeEnlazada()
 {
     this.Cabeza = null;
     this.Tamaño = 0;
 }
コード例 #9
0
 public void Limpiar()
 {
     this.Cabeza = null;
     Marshal.FreeHGlobal((IntPtr)this.Cabeza);
     this.Tamaño = 0;
 }