class Lista
Clase Lista
que contendra diversos nodos enlazados entre si
Attributes
head[R]
size[R]
tail[R]
Public Class Methods
new(head)
click to toggle source
# File lib/practica/lista.rb, line 6 def initialize(head) #constructor @size = 1 #inicializamos el size de la lista a 1 @gei=0.0 #establecemos @terreno y @ gei total a 0 @terreno=0.0 @cadena ="#{head.to_s}" # creamos el objeto lista formateado a string @nuevo = Node.new(head,nil,nil) # creamos el nodo con el objeto que le pasamos por parametro @head = @nuevo # establecemos que tanto la cabeza como la cola son el mismo, pues la lista solo tiene un nodo @tail = @nuevo end
Public Instance Methods
[](index)
click to toggle source
# File lib/practica/lista.rb, line 24 def [] (index) #operador de acceso segun un indice if index.is_a?Integer #verificamos que el indice es un entero if index== 0 # en caso de que sea 0, retornamos head return @head.get_this elsif index== (@size -1) #en caso de que sea el ultimo, retornamos head return @tail.get_this elsif index< (@size -1) && index> 0 # en otro caso, recorremos la lista hasta encontrar el nodo que corresponda al indice iterator= @head index.times{iterator= iterator.next} return iterator.get_this else # en cualquier otro caso retornamos nil return nil end end return nil end
buscar(dato,siguiente,anterior)
click to toggle source
# File lib/practica/lista.rb, line 42 def buscar (dato,siguiente,anterior) #metodo para buscar un Alimento dentro de la lista @actual = @head #nodo con el que vamos a comparar @encontrado = false # condicion de parada while (@actual != nil && @encontrado ==false) do # bucle que recorre todos los nodos hasta que o bien encuentra una coincidencia o hasta que no hayan mas nodos if (dato == @actual.get_valor ) then # si coincide if((siguiente == nil )&& (@actual.get_siguiente==nil)) then # en caso de que no haya siguiente if(@actual.get_prev.get_valor == anterior) then # si el anterior coincide @encontrado=true # lo encontamos end elsif (anterior==nil && @actual.get_prev== nil) then # en caso de que no haya anterior if(@actual.get_siguiente.get_valor == siguiente)then # comparamos con el siguiente @encontrado=true # lo encontramos end elsif(@actual.get_prev != nil && @actual.get_siguiente !=nil) #verificamos que tanto siguiente como anterior no son nil if(@actual.get_siguiente.get_valor ==siguiente && @actual.get_prev.get_valor == anterior ) then #si tanto anterior como siguiente coinciden @encontrado=true # lo encontramos else @actual=@actual.get_siguiente # em caso contrario avanzamos end else #si no coincide anterior y siguiente @actual=@actual.get_siguiente # obtenemos el siguiente nodo end else #si no @actual=@actual.get_siguiente # obtenemos el siguiente nodo end end return @encontrado #retornamos si lo encontramos o no end
each() { |get_valor| ... }
click to toggle source
# File lib/practica/lista.rb, line 16 def each #operador each para Enumerable @i = head #indice que empieza en head while (@i != nil) # bucle para recorrer la lista, hasta que el indice sea nil ( el siguiente despues de la cola) yield @i.get_valor # marcamos el valor del nodo en el que se encuentra el indice @i=@i.get_siguiente # hacemos que el indice avance al proximo nodo end end
get_gei()
click to toggle source
# File lib/practica/lista.rb, line 123 def get_gei #metodo que obtiene el total de GEI de todos los alimentos dentro de la lista @actual = @head while (@actual != nil ) do # bucle que recorre todos los nodos hasta que o bien encuentra una coincidencia o hasta que no hayan mas nodos @gei= @gei +@actual.get_valor.get_GEI @actual = @actual.get_siguiente end return @gei.round(2) end
get_gei_y()
click to toggle source
# File lib/practica/lista.rb, line 136 def get_gei_y #metodo que obtioene el GEI por año return (self.get_gei * 365).round(2) end
get_terreno()
click to toggle source
# File lib/practica/lista.rb, line 141 def get_terreno #metodo que obtiene el terreno total de todos los Alimentos de la lista @actual = @head while (@actual != nil ) do # bucle que recorre todos los nodos hasta que o bien encuentra una coincidencia o hasta que no hayan mas nodos @terreno= @terreno +@actual.get_valor.get_terreno @actual = @actual.get_siguiente end return @terreno.round(2) end
insertar(nuevo)
click to toggle source
# File lib/practica/lista.rb, line 103 def insertar(nuevo) #metodo para insertar un Alimento por la cabeza @size = @size +1 @nodo_nuevo = Node.new(nuevo,nil,nil) @head.set_prev(@nodo_nuevo.get_this) @aux = @head.get_this @head = @nodo_nuevo.get_this @head.set_next(@aux.get_this) return @head.get_valor end
insertar_back(nuevo)
click to toggle source
# File lib/practica/lista.rb, line 91 def insertar_back(nuevo) #metodo para insertar un Alimento por el final de la lista @size = @size +1 @nodo_nuevo = Node.new(nuevo,nil,nil) @tail.set_next(@nodo_nuevo.get_this) @aux=@tail.get_this @tail = @nodo_nuevo.get_this @tail.set_prev(@aux.get_this) return @tail.get_valor end
insertar_list(lista)
click to toggle source
# File lib/practica/lista.rb, line 115 def insertar_list(lista) # metodo que se encarga de enlazar dos listas @size = @size+lista.size @tail.set_next(lista.head.get_this) lista.head.set_prev(@tail.get_this) @tail=lista.tail.get_this return @tail end
pop()
click to toggle source
# File lib/practica/lista.rb, line 154 def pop # metodo que saca un alimento desde la cabeza @size = @size -1 @aux = @head @head =@head.get_siguiente @head.set_prev(nil) @aux.set_next(nil) return @aux.get_valor end
pop_back()
click to toggle source
# File lib/practica/lista.rb, line 163 def pop_back # metodo que saca un alimento desde la cola @size = @size-1 @aux =@tail @tail = @tail.get_prev @tail.set_next(nil) @aux.set_prev(nil) return @aux.get_valor end
to_s()
click to toggle source
# File lib/practica/lista.rb, line 173 def to_s #metodo que formatea la lista en un string @actual = @head.get_siguiente if(@actual != nil) then while (@actual!=nil) do @cadena= @cadena + ",#{@actual.get_valor.to_s}" @actual = @actual.get_siguiente end end return @cadena end