Class: Lista
Overview
Clase Lista que contendra diversos nodos enlazados entre si
Instance Attribute Summary collapse
-
#head ⇒ Object
readonly
Returns the value of attribute head.
-
#size ⇒ Object
readonly
Returns the value of attribute size.
-
#tail ⇒ Object
readonly
Returns the value of attribute tail.
Instance Method Summary collapse
-
#[](index) ⇒ Object
operador de acceso segun un indice.
-
#buscar(dato, siguiente, anterior) ⇒ Object
metodo para buscar un Alimento dentro de la lista.
-
#each ⇒ Object
operador each para Enumerable.
-
#get_gei ⇒ Object
metodo que obtiene el total de GEI de todos los alimentos dentro de la lista.
-
#get_gei_y ⇒ Object
metodo que obtioene el GEI por año.
-
#get_terreno ⇒ Object
metodo que obtiene el terreno total de todos los Alimentos de la lista.
-
#initialize(head) ⇒ Lista
constructor
constructor.
-
#insertar(nuevo) ⇒ Object
metodo para insertar un Alimento por la cabeza.
-
#insertar_back(nuevo) ⇒ Object
metodo para insertar un Alimento por el final de la lista.
-
#insertar_list(lista) ⇒ Object
metodo que se encarga de enlazar dos listas.
-
#pop ⇒ Object
metodo que saca un alimento desde la cabeza.
-
#pop_back ⇒ Object
metodo que saca un alimento desde la cola.
-
#to_s ⇒ Object
metodo que formatea la lista en un string.
Constructor Details
#initialize(head) ⇒ Lista
constructor
6 7 8 9 10 11 12 13 14 15 |
# 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 |
Instance Attribute Details
#head ⇒ Object (readonly)
Returns the value of attribute head.
3 4 5 |
# File 'lib/practica/lista.rb', line 3 def head @head end |
#size ⇒ Object (readonly)
Returns the value of attribute size.
3 4 5 |
# File 'lib/practica/lista.rb', line 3 def size @size end |
#tail ⇒ Object (readonly)
Returns the value of attribute tail.
3 4 5 |
# File 'lib/practica/lista.rb', line 3 def tail @tail end |
Instance Method Details
#[](index) ⇒ Object
operador de acceso segun un indice
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# 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) ⇒ Object
metodo para buscar un Alimento dentro de la lista
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# 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 ⇒ Object
operador each para Enumerable
16 17 18 19 20 21 22 |
# 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 ⇒ Object
metodo que obtiene el total de GEI de todos los alimentos dentro de la lista
123 124 125 126 127 128 129 130 131 132 133 134 |
# 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 ⇒ Object
metodo que obtioene el GEI por año
136 137 138 139 |
# 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 ⇒ Object
metodo que obtiene el terreno total de todos los Alimentos de la lista
141 142 143 144 145 146 147 148 149 150 151 152 |
# 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) ⇒ Object
metodo para insertar un Alimento por la cabeza
103 104 105 106 107 108 109 110 111 112 113 |
# 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) ⇒ Object
metodo para insertar un Alimento por el final de la lista
91 92 93 94 95 96 97 98 99 100 101 |
# 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) ⇒ Object
metodo que se encarga de enlazar dos listas
115 116 117 118 119 120 121 |
# 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 ⇒ Object
metodo que saca un alimento desde la cabeza
154 155 156 157 158 159 160 161 |
# 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 ⇒ Object
metodo que saca un alimento desde la cola
163 164 165 166 167 168 169 170 171 |
# 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 ⇒ Object
metodo que formatea la lista en un string
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# 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 |