class Alimentos::Lista
Encargada de la representacion de una lista doblemente elazada
@author Pablo Molina Martinez alu0101103181@ull.edu.es
Attributes
cabeza[R]
cola[R]
lista[R]
tam[R]
Public Class Methods
new()
click to toggle source
Crea un lista vacia, con una cabeza nula y una cola nula, ademas de un tamaño 0
# File lib/alimentos.rb, line 101 def initialize @lista = [] @cabeza = nil @cola = nil @tam = 0 end
Public Instance Methods
extract_head()
click to toggle source
Extrae la cabeza de la lista modificado el 2 miembro.
@return [Int] Devuelve el tamaño nuevo de la lista
# File lib/alimentos.rb, line 134 def extract_head @tam -= 1 aux = @cabeza @lista.slice!(0) if @tam != 0 @lista[0].prev = nil @cabeza = @lista[0] @cola = @lista[@tam - 1] end aux end
extract_tail()
click to toggle source
Extrae la cola de la lista modificado el antepenultimo miembro.
@return [Int] Devuelve el tamaño nuevo de la lista
# File lib/alimentos.rb, line 151 def extract_tail aux = @cola @lista.slice!(@tam - 1) @tam -= 1 if @tam != 0 @lista[@tam - 1].next = nil @cola = @lista[@tam - 1] end aux end
insert(nodo)
click to toggle source
Inserta un nodo por la cola de la lista, cambiando la cola del ultimo nodo y poniendo la del suyo propio a 0
@param [Node] nodo Nodo que se va a insertar a la lista
@return [Int] Devuelve el tamaño nuevo de la lista
# File lib/alimentos.rb, line 115 def insert(nodo) node = Struct.new(:value, :next, :prev) if @cabeza == nil @lista[@tam] = node.new(nodo, nil, nil) @cabeza = @lista[0] @cola = @lista[0] else @lista[@tam] = node.new(nodo, nil, @lista[@tam - 1]) @lista[@tam - 1].next = @lista[@tam] @cola = @lista[@tam] end @tam += 1 end