Class: Lista::Lista

Inherits:
Object
  • Object
show all
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

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

#eachObject

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_backObject

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_frontObject

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

#sortWEachObject

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

#sortWForObject

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_sObject

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