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