Sha256: f5c9763ba3611c8051739a66056ff19bbc116c9bdf2ad380732bb053c7427e3e

Contents?: true

Size: 1.29 KB

Versions: 2

Compression:

Stored size: 1.29 KB

Contents

module Alimento

# Clase que representa a un Nodo de una lista doblemente enlazada
Nodo = Struct.new(:valor, :siguiente, :anterior)

# Clase que representa a una lista doblemente enlazada
# Se ha incluido el mixin Enumerable
class Lista
	include Enumerable
	
	# Se asignan la cabeza (@head) y la cola (@tail) y se enlazan
	def initialize(head, tail)
		@head = head
		@tail = tail
		
		@head.siguiente = @tail
		@tail.anterior = @head
	end
	
	# Getter/Setter de @head
	def head
		@head
	end
	
	# Getter/Setter de @tail
	def tail
		@tail
	end
	
	# Método que inserta un nodo en la cabeza de la lista
	def insert(nodo)
		if(nodo.is_a?Nodo) then
			aux = @head
			@head = nodo
			@head.anterior = nil
			@head.siguiente = aux
			aux.anterior = @head
		end
	end
	
	# Método que extrae/elimina el primer valor de la lista
	def head_out
		aux = @head.siguiente
		@head.siguiente = nil
		@head = aux
		@head.anterior = nil
	end
	
	# Método que extrae/elimina el último valor de la lista
	def tail_out
		aux = @tail.anterior
		@tail.anterior = nil
		@tail = aux
		@tail.siguiente = nil
	end
	
	# Se incluye el método del mixin Enumerable
	# Se define como una iteración sobre los valores de cada nodod de la lista
	def each
		tmp = @head
		while tmp != nil do
			yield tmp.valor
			tmp = tmp.siguiente
		end
	end
end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
alimento-alu0100965667-0.1.1 lib/alimento/lista.rb
alimento-alu0100965667-0.1.0 lib/alimento/lista.rb