Class: Lista::Lista
- Inherits:
-
Object
- Object
- Lista::Lista
- Includes:
- Enumerable
- Defined in:
- lib/alimento/fuente.rb
Overview
Esta clase permite representar una lista doblemente enlazadas Se han incluido el mixin Enumerable.
Defined Under Namespace
Classes: Node
Instance Method Summary collapse
-
#each ⇒ Object
Se incluye el metodo del mixin Enumerable Se define como una iteración sobre los elementos de la lista.
-
#initialize(val) ⇒ Lista
constructor
Inicializa la clase con un valor.
-
#pop_back ⇒ Object
Elimina el ultimo elemento de la lista.
-
#pop_front ⇒ Object
Elimina el primer elemento de la lista.
-
#push(val) ⇒ Object
Añade los valores a la lista desde el final.
-
#sortWEach ⇒ Object
Metodo de ordenacion con metodos each.
-
#sortWFor ⇒ Object
Metodo de ordenacion con bucles for.
-
#to_s ⇒ Object
Formatea la Lista a una cadena de caracteres.
Constructor Details
#initialize(val) ⇒ Lista
Inicializa la clase con un valor
302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 |
# File 'lib/alimento/fuente.rb', line 302 def initialize(val) if val.instance_of?Array val.each_with_index do |value,i| if i==0 first=Node.new(nil,value,nil) @head=first @tail=first else aux=Node.new(@tail, value, nil) @tail.next=aux @tail=aux end end else first=Node.new(nil,val,nil) @head=first @tail=first end end |
Instance Method Details
#each ⇒ Object
Se incluye el metodo del mixin Enumerable Se define como una iteración sobre los elementos de la lista
358 359 360 361 362 363 364 |
# File 'lib/alimento/fuente.rb', line 358 def each current=@head while current!=nil yield current.value current=current.next end end |
#pop_back ⇒ Object
Elimina el ultimo elemento de la lista
348 349 350 351 352 353 354 |
# File 'lib/alimento/fuente.rb', line 348 def pop_back aux=@tail.value @tail=@tail.prev @tail.next.prev=nil @tail.next=nil aux end |
#pop_front ⇒ Object
Elimina el primer elemento de la lista
339 340 341 342 343 344 345 |
# File 'lib/alimento/fuente.rb', line 339 def pop_front aux=@head.value @head=@head.next @head.prev.next=nil @head.prev=nil aux end |
#push(val) ⇒ Object
Añade los valores a la lista desde el final
323 324 325 326 327 328 329 330 331 332 333 334 335 336 |
# File 'lib/alimento/fuente.rb', line 323 def push(val) if val.instance_of?Array val.each do |i| aux=Node.new(@tail, i, nil) @tail.next=aux @tail=aux end else aux=Node.new(@tail, val, nil) @tail.next=aux @tail=aux end @tail.value end |
#sortWEach ⇒ Object
Metodo de ordenacion con metodos each
388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 |
# File 'lib/alimento/fuente.rb', line 388 def sortWEach arr=[] current=@head while (current!=nil) arr << current.value current=current.next end arr.each.with_index(1) do |val,i| arr.each_with_index do |val2,j| if (j<arr.size-i) if arr[j+1]<arr[j] aux=arr[j+1] arr[j+1]=arr[j] arr[j]=aux end end end end end |
#sortWFor ⇒ Object
Metodo de ordenacion con bucles for
367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 |
# File 'lib/alimento/fuente.rb', line 367 def sortWFor arr=[] current=@head while (current!=nil) arr << current.value current=current.next end for i in 1..arr.size-1 for j in 0..arr.size-i-1 if arr[j+1]<arr[j] aux=arr[j+1] arr[j+1]=arr[j] arr[j]=aux end end end arr end |
#to_s ⇒ Object
Formatea la Lista a una cadena de caracteres
410 411 412 413 414 415 416 417 418 419 420 421 422 |
# File 'lib/alimento/fuente.rb', line 410 def to_s current=@head sout="[" while current!=nil if current.next==nil sout+=current.value.to_s else sout+=current.value.to_s + "," end current=current.next end sout+="]" end |