Sha256: fda313b962befce7d1bb809b872a1827cd1a74bebc1591fc9c4dc722383bba98

Contents?: true

Size: 1.65 KB

Versions: 1

Compression:

Stored size: 1.65 KB

Contents

##Creamos la estructura de un nodo nuevo, con su valor, su nodo siguiente y su nodo rpevio
Nodo = Struct.new(:valor, :siguiente, :prev)



##Definicion de la Clase Lista
class Lista

  ##Incluimos el Enumerable
  include Enumerable
  
  ##AƱadimos atributo de lectura
  attr_reader :cabecera, :cola
  
  
  ##Inicializamos la cabecera y la cola de la lista a nulo
  def initialize
  
  	@cabecera = nil
       @cola= nil
  end
  
  
  ##Metodo push de a lista que introduce los valores dentro de la misma
  
  def push (valores)
          if(valores.instance_of? Array)
              if(@cola == nil)
                
                @cola = Nodo.new(valores[0],nil,nil)
                @cabecera = @cola
                valores.shift()
              end
  
            valores.each do |valor|
            aux= @cabecera
            @cabecera = Nodo.new(valor,nil,aux)
            aux.siguiente= @cabecera
  	end
          else
  
            if(@cola==nil)
              @cola = Nodo.new(valores,nil,nil)
              @cabecera = @cola
            else
             aux= @cabecera
            @cabecera = Nodo.new(valores,nil,aux)
            aux.siguiente= @cabecera
            end
          end
    end
  
  
  ##Funcion pop que devuelve el valor de la cabecera y la elimina de la lista
  def pop
  	if(@cabecera!=nil)
  	node = @cabecera
  	@cabecera = @cabecera.prev
    if(@cabecera!=nil)
    @cabecera.siguiente = nil
    node.prev= nil
  else @cola = nil
    end
  	return node.valor
  	end
  end
  
  
  
  ## Metodo each para el enumerable
  
  def each
    nodo = @cola
    while(nodo != nil)
        yield nodo.valor
        nodo = nodo.siguiente
    end
    
  end
  
end
  
  

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
Dieta-alu0100887778-0.1.0 lib/Dieta/lista.rb