class Lista

Clase que implementa una lista doblemente enlazada. @author alu0100895179 @attr_reader [Node] first Primer nodo de la lista @attr_reader [Node] last Último nodo de la lista

Constants

Node

Attributes

first[R]
last[R]

Public Class Methods

new() click to toggle source

Método que inicializa la lista vacía con first=nil y last=nil.

# File lib/lista.rb, line 14
def initialize
        
        @last=nil 
        @first=nil
        
end

Public Instance Methods

each() { |aux_node| ... } click to toggle source

Método each necesario para que la lista sea enumerable, indicando como se debe recorrer la lista.

# File lib/lista.rb, line 112
def each
aux_node=@first
        while aux_node != nil
                yield aux_node[:value]
                aux_node=aux_node[:next]
        end
end
extract() click to toggle source

Método para extraer el último nodo de la lista. @return [value] Retornamos el valor contenido en el último nodo.

# File lib/lista.rb, line 41
def extract
        if @last == nil
                
                puts "La lista está vacía! Es necesario insertar algún elemento antes de extraer."

        elsif @last == @first
                aux=@first[:value]
                @first=nil
                @last=@first
                aux
        else
                to_extract=@last[:value]
                
                @last=@last[:prev]
                @last[:next]=nil
                to_extract
        end
end
insert(new_val) click to toggle source

Método para insertar un nuevo nodo en la lista. @param [Node] new_val Recibimos un nuevo dato y creamos un nodo para insertarlo en la lista

# File lib/lista.rb, line 23
def insert(new_val)
        
        if @first == nil
                new_node=Node.new(new_val, nil, nil)
                @first=new_node
                @last=@first
        else
                
                prev=@last
                new_node=Node.new(new_val, prev, nil)
                @last[:next]=new_node
                @last=new_node
                
        end
end
mostrar_inverso() click to toggle source

Método para mostrar por pantalla todos los elementos de la lista en orden inverso. @return [string] Devuelve una cadena con todo el texto de la lista

# File lib/lista.rb, line 88
def mostrar_inverso
        
        aux_node=@last
        i=1
        string = ""
        if aux_node != nil
                while aux_node != nil
                        if(aux_node[:value].is_a?Lista)
                                string << " ~ Día #{i} ~ \n"
                        else
                                string << "#{i}) "
                        end
                        string << aux_node[:value].to_s
                        string << "\n"
                        i+=1
                        aux_node=aux_node[:prev]
                end
        else
                string = "La lista está vacía así que es imposible mostrar!\n"
        end
        string
end
to_s() click to toggle source

Método para mostrar por pantalla todos los elementos de la lista en orden. @return [string] Devuelve una cadena con todo el texto de la lista

# File lib/lista.rb, line 62
def to_s
        
        aux_node=@first
        i=1
        string = ""
        if aux_node != nil
                while aux_node != nil
                        
                        if(aux_node[:value].is_a?Lista)
                                string << " ~ Día #{i} ~ \n"
                        else
                                string << "#{i}) "
                        end
                        string << aux_node[:value].to_s
                        string << "\n"
                        i+=1
                        aux_node=aux_node[:next]
                end
        else
                string = "La lista está vacía así que es imposible mostrar!\n"
        end
        string
end