class Doublylinkedlist::Doublylinkedlist

En esta clase creamos nuestra propia lista doblemente enlazada @author Rafael Herrero

Public Class Methods

new() click to toggle source

Iniciar los punteros de la lista, inicio y final

# File lib/doublylinkedlist/doublylinkedlist.rb, line 8
def initialize()
            @inicio = nil
            @final = nil
    end

Public Instance Methods

each(&block) click to toggle source

Método para que la lista sea enumerable

# File lib/doublylinkedlist/doublylinkedlist.rb, line 135
def each (&block)
        copia = @inicio
        while !copia.nil?
                block.call(copia[:valor])
                copia = copia[:sig]
        end
end
extraer_final() click to toggle source

Metodo que nos permite extraer algo al final de la lista

# File lib/doublylinkedlist/doublylinkedlist.rb, line 77
def extraer_final()
        
        if !@inicio.nil?

                if @inicio[:sig].nil? && @final[:sig].nil?
                        @inicio = nil
                        @final = nil
                
                else
                        @final = @final[:ant]
                        @final[:sig] = nil
                end

        else
                raise RuntimeError, "La lista esta vacia"
        end
end
extraer_inicio() click to toggle source

Metodo que nos permite extraer algo al inicio de la lista

# File lib/doublylinkedlist/doublylinkedlist.rb, line 58
def extraer_inicio()
        
        if !@inicio.nil?

                if @inicio[:sig].nil? && @final[:sig].nil?
                        @inicio = nil
                        @final = nil
                
                else
                        @inicio = @inicio[:sig]
                        @inicio[:ant] = nil
                end

        else
                raise RuntimeError, "La lista esta vacia"
        end
end
insertar_final(val) click to toggle source

Metodo que nos permite insertar algo al final de la lista @param [val] val recibe el valor a insertar en la lista

# File lib/doublylinkedlist/doublylinkedlist.rb, line 45
def insertar_final(val)
        if @final.nil?
                @inicio = Struct::Nodo.new(nil, val, nil)
                @final = @inicio
        else
            copia = @final
                @final[:sig] = Struct::Nodo.new(copia, val, nil)
                copia2 = @final[:sig]
                @final = copia2
        end
end
insertar_inicio(val) click to toggle source

Metodo que nos permite insertar algo al inicio de la lista @param [val] val recibe el valor a insertar en la lista

# File lib/doublylinkedlist/doublylinkedlist.rb, line 32
def insertar_inicio(val)
        if @inicio.nil?
                @inicio = Struct::Nodo.new(nil, val, nil)
                @final = @inicio
        else
                copia = @inicio
                @inicio = Struct::Nodo.new(nil, val, copia)
                copia[:ant] = @inicio
        end
end
ordenar!() click to toggle source

Metodo que nos ordenada la lista segun los criterios de la APA

# File lib/doublylinkedlist/doublylinkedlist.rb, line 144
def ordenar! 
        cambio = true
        while cambio
                cambio = false
                i = @inicio
                i_1 = @inicio[:sig]
                while i_1 != nil
                        if(i[:valor] > i_1[:valor])
                                i[:valor], i_1[:valor] = i_1[:valor], i[:valor]
                                cambio = true
                        end
                        i = i_1
                        i_1 = i_1[:sig]
                end
        end
end
posicion(pos) click to toggle source

Metodo que devuelve lo contenido en una posicion de la lista @param [pos] pos del elemento deseado @return nodo de la posicion de la lista

# File lib/doublylinkedlist/doublylinkedlist.rb, line 114
def posicion (pos)
      if @inicio.nil?
              raise RuntimeError, "La lista esta vacia"
      end

      if pos<0 || pos>tamano-1
              raise RuntimeError, "La posicion no es correcta"
      end

       contador=0
       copia=@inicio
                while contador<pos && !copia.nil?
                        copia2 = copia[:sig]
                      copia = copia2
                      contador += 1
              end
      
        return copia[:valor]
end
tamano() click to toggle source

Metodo que nos devuelve la cantidad de elementos en la lista @return cantidad de elementos en la lista

# File lib/doublylinkedlist/doublylinkedlist.rb, line 97
def tamano()
        if !@inicio.nil?

                contador = 1
                copia = @inicio

                while !copia[:sig].nil?
                        contador += 1
                        copia2 = copia[:sig]
                        copia = copia2
                end
        end
        return contador
end
to_s() click to toggle source

Metodo para imprimir la lista con formato @return la lista formateada en un string

# File lib/doublylinkedlist/doublylinkedlist.rb, line 14
def to_s
        actual = @inicio
        cadena = "|"
                while !actual.nil?
                        cadena << actual[:valor].to_s

                        if !actual[:sig].nil?
                                cadena << ", "
                        end

                        actual = actual[:sig]
                end
        cadena << "|"
        return cadena
end