Sha256: f08f3ac98443206cedafa6229baeb94301b92923475135d983fd5914cb69f09d

Contents?: true

Size: 1.78 KB

Versions: 1

Compression:

Stored size: 1.78 KB

Contents

# @author Hernan Daniel Gonzalez Guanipa
module Alimento
	
	# @note Estructura de datos correspondiente a un nodo
	Node = Struct.new(:value, :next, :prev)

	class List
	
		include Enumerable

		attr_reader :head, :tail
		
		# @note Constructor de la clase
		# @param value Contenido de un nodo
		def initialize (value)
			@head = Node.new(value, nil, nil) 
			@tail = @head
		end

	
		# @note Recorrer la lista
		def each
			return nil unless block_given?
			actual = self.tail
			while actual
				yield actual
				actual = actual.next
			end
		end
	

		# @note Insertar elemento en la cabeza de la lista
		# @param value Contenido del nodo a insertar
		def insert_head(value)
			actual_head = @head
			new_head = Node.new(value, nil,actual_head)
			actual_head.next = new_head
			@head = new_head
		end
		

		# @note Insertar elemento por la cola de la lista
		# @param value Contenido del nodo a insertar
		def insert_tail(value)
			actual_tail = @tail
			new_tail = Node.new(value, actual_tail, nil)
			actual_tail.prev = new_tail
			@tail = new_tail
		end


		# @note Insertar varios elementos en la lista
		# @param value_array Vector de elementos a insertar en la lista
		def insert_sundry(value_array)
			i = 0
			while i < value_array.length do
				insert_head(value_array[i])
				i += 1
			end
		end
		


		# @note Extraer el elemento en la cabeza de la lista
		# @return [Node] Nodo de la lista extraido
		def extract_head
			actual_head = @head
			new_head = actual_head.prev
			actual_head.prev = nil
			new_head.next = nil
			return new_head
		end
		

		# @note Extraer elemento en la cabeza de la lista
		# @return [Node] Nodo de la lista extraido
		def extract_tail
			actual_tail = @tail
			new_tail = actual_tail.next
			actual_tail.next = nil
			new_tail.prev = nil
			return new_tail
		end

	end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
alimento_alu0101050218-0.1.0 lib/alimento/list.rb