module Dieta Node = Struct.new(:valor, :siguiente, :anterior) class Lista attr_reader :cabecera, :longitud, :cola include Enumerable def initialize @cabecera = nil @cola = nil @longitud = 0 end def each temp = @cabecera while temp != nil do yield temp.valor temp = temp.siguiente end end def push(valores) if valores.instance_of? Array valores.each do |valor| node = Node.new(valor, nil, nil) if @cabecera.nil? @cabecera = node @cola = node else node = Node.new(valor, nil, @cola) @cola.siguiente = node @cola = node end @longitud += 1 end else node = Node.new(valores, nil, nil) if @cabecera.nil? @cabecera = node @cola = node else node = Node.new(valores, nil, @cola) @cola.next = node @cola = node end @longitud += 1 end @cola.valor end def pop unless @cabecera.nil? node = @cabecera @cabecera = @cabecera.siguiente @cabecera.anterior = nil node.valor end end def get unless @cola.nil? node = @cola @cola = @cola.anterior @cola.siguiente = nil node.valor end end def get_e(indice) temp = @cabecera count = 0 while count < indice - 1 do temp = temp.siguiente count += 1 end temp.valor end def set_e(indice, val) temp = @cabecera count = 0 while count < indice - 1 do temp = temp.siguiente count += 1 end temp.valor = val end def to_s count = 2 output = @cabecera.valor.to_s while count < @longitud - 1 do obj = get_e(count) output += obj.to_s count += 1 end output end end end