class List
Esta clase permite representar una lista doblemente enlazada. Se ha incluido el módulo Enumerable.
Attributes
Public Class Methods
Se asignan el valor del head y el tail de la lista, que inicialmente es nil.
# File lib/P06/list.rb, line 18 def initialize @head = nil @tail = nil end
Public Instance Methods
Este metodo es el each que van a utilizar los metodos del módulo Enumerable, pero esta acomodado a nuestra clase.
# File lib/P06/list.rb, line 154 def each i = @tail while i != nil yield i.value i = i.next end end
Nos devuelve el nodo siguiente de un nodo que le pasamos por parámetros.
# File lib/P06/list.rb, line 54 def get_next(value) if @head == nil #Comprobamos si la lista no esta vacía raise RuntimeError, "Lista vacía, no se puede extraer nodo" else i = @tail @valor = nil while i != nil if i.value == value @valor = i.next end i = i.next end end @valor end
Devuelve el nodo previo al nodo que pasamos por parámetros.
# File lib/P06/list.rb, line 72 def get_prev(value) if @head == nil #Comprobamos si la lista no esta vacía raise RuntimeError, "Lista vacía, no se puede extraer nodo" else i = @tail @valor = nil while i != nil if i.value == value @valor = i.prev end i = i.next end end @valor end
Devuelve el valor de un nodo que le pasamos por parametros.
# File lib/P06/list.rb, line 36 def get_value(value) if @head == nil #Comprobamos si la lista no esta vacía raise RuntimeError, "Lista vacía, no se puede extraer nodo" else i = @tail @valor=nil while i != nil if i.value == value @valor = i.value end i = i.next end end @valor end
Este metodo nos permite extraer el head de la lista.
# File lib/P06/list.rb, line 132 def pop_head extraido = false if @head == nil #Comprobamos si la lista no esta vacía raise RuntimeError, "Lista vacía, no se puede extraer nodo" else extraido = true if @head == @tail @head = nil @tail = nil else @head = @head.prev @head.next = nil end end return extraido end
Este metodo nos permite extraer el tail de la lista.
# File lib/P06/list.rb, line 111 def pop_tail extraido = false if @head == nil #Comprobamos si la lista no esta vacía raise RuntimeError, "Lista vacía, no se puede extraer nodo" else extraido = true if @head == @tail @head = nil @tail = nil else @tail = @tail.next @tail.prev = nil end end return extraido end
Inseta un valor por la cabeza de la lista.
# File lib/P06/list.rb, line 24 def push_head (nodo) if @head == nil @head = Nodo.new(nodo,nil,nil) @tail = @head else @head.next = Nodo.new(nodo,nil,@head) @head = @head.next end end
Este metodo nos permite insertar varios valores a la lista. Estos valores se insertan por el head.
# File lib/P06/list.rb, line 103 def push_others(values) for i in (0..values.size-1) push_head(values[i]) end end
Este metodo nos devuelve el tamaño de la lista.
# File lib/P06/list.rb, line 90 def size size = 0 i = @tail while i != nil i = i.next size+=1 end return size end