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
Public Class Methods
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
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
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
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
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
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