Class: Lista

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/nutriente/lista.rb

Overview

Clase lista, lista doblemente enlazada

Author:

  • Sergio Moreno Martín

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(val) ⇒ Lista

Constructor, requiere la cabeza y la cola de la lista



18
19
20
21
# File 'lib/nutriente/lista.rb', line 18

def initialize(val)
    @head = Node.new(val,nil,nil)
    @tail = @head
end

Instance Attribute Details

#headObject (readonly)

Returns the value of attribute head.



14
15
16
# File 'lib/nutriente/lista.rb', line 14

def head
  @head
end

#head:Object (readonly)

Devuelve el nodo cabeza de la lista

Returns:

  • (Object)

    the current value of head:



12
13
14
# File 'lib/nutriente/lista.rb', line 12

def head:
  @head:
end

#tailObject (readonly)

Returns the value of attribute tail.



14
15
16
# File 'lib/nutriente/lista.rb', line 14

def tail
  @tail
end

#tail:Object (readonly)

Devuelve el nodo cola de la lista

Returns:

  • (Object)

    the current value of tail:



12
13
14
# File 'lib/nutriente/lista.rb', line 12

def tail:
  @tail:
end

Instance Method Details

#eachObject

Metodo each, es un metodo que sirve para iterar por todos los elementos de la lista, es necesario para el funcionamiento de los mixins de Enumerable



100
101
102
103
104
105
106
# File 'lib/nutriente/lista.rb', line 100

def each
    actual = @head
    while actual != nil do
        yield actual.value
        actual = actual.next
    end
end

#extract_headObject

Extraer el nodo situado en la cabeza de la lista



47
48
49
50
51
52
# File 'lib/nutriente/lista.rb', line 47

def extract_head
    aux = @head.value
    @head = @head.next
    @head.prev = nil
    return aux
end

#extract_tailObject

Extrae el nodo situado en la cola de la lista



55
56
57
58
59
60
# File 'lib/nutriente/lista.rb', line 55

def extract_tail
    aux = @tail.value
    @tail = @tail.prev
    @tail.next = nil
    return aux
end

#gei_diarioObject

Cálculo de la emisión de gases de efecto invernadero diarios



78
79
80
81
82
83
84
85
86
# File 'lib/nutriente/lista.rb', line 78

def gei_diario
    aux = 0
    current = @head
    while current != nil
        aux += current.value.gei
        current = current.next
    end
    return aux
end

#insert_head(val) ⇒ Object

Inserta un nodo por la cabeza de la lista



33
34
35
36
37
# File 'lib/nutriente/lista.rb', line 33

def insert_head(val)
    aux = Node.new(val,@head,nil)
    @head.prev = aux
    @head = aux
end

#insert_tail(val) ⇒ Object

Inserta un nodo por la cola de la lista



40
41
42
43
44
# File 'lib/nutriente/lista.rb', line 40

def insert_tail(val)
    aux = Node.new(val,nil,@tail)
    @tail.next = aux
    @tail = aux
end

#is_emptyObject

Comprueba si la lista está vacía



24
25
26
27
28
29
30
# File 'lib/nutriente/lista.rb', line 24

def is_empty
    if(@head == nil) && (@tail == nil)
        return true
    else
        return false
    end
end

#to_sObject

Salida formateado como string de todos los elementos de la lista



63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/nutriente/lista.rb', line 63

def to_s 
    current = @head
    string = "[ "
    while current != nil
        if(current.next == nil)
            string += "#{current.value}"
        else
            string += "#{current.value}, "
        end
        current = current.next
    end
    return string += " ]"
end

#uso_terrenoObject

Cálculo del uso del terreno



89
90
91
92
93
94
95
96
97
# File 'lib/nutriente/lista.rb', line 89

def uso_terreno
    aux = 0
    current = @head
    while current != nil
        aux += current.value.terreno
        current = current.next
    end
    return aux
end