Class: List

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

Defined Under Namespace

Classes: Node

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeList

Constructor. Genera una Lista vacia, sin nodos, con head y tail nil.



20
21
22
23
24
# File 'lib/practica6/lista.rb', line 20

def initialize
    @tail= nil
    @head= nil
    @size= 0
end

Instance Attribute Details

#headObject (readonly)

Los atributos son de lecutra



15
16
17
# File 'lib/practica6/lista.rb', line 15

def head
  @head
end

#sizeObject (readonly)

Los atributos son de lecutra



15
16
17
# File 'lib/practica6/lista.rb', line 15

def size
  @size
end

#tailObject (readonly)

Los atributos son de lecutra



15
16
17
# File 'lib/practica6/lista.rb', line 15

def tail
  @tail
end

Instance Method Details

#[](index) ⇒ <Tempalte>

Permite acceder a un elemento de la lista en concreto.

Parameters:

  • posición (Integer)

    del nodo al que se desea acceder.

Returns:

  • (<Tempalte>)

    Valor del nodo al que se ha accedido.



157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/practica6/lista.rb', line 157

def [] (index)
	if index.is_a?Integer
		if index== 0
			return @head.value
		elsif index== (@size- 1)
			return @tail.value
		elsif index< (@size- 1) && index> 0
			iterator= @head
			index.times{iterator= iterator.next}
			return iterator.value
		else
			return nil
		end
	end
end

#eachObject

Ejecuta un bloque de código para cada elemento de la Lista.



142
143
144
145
146
147
148
# File 'lib/practica6/lista.rb', line 142

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

#emisionesDouble

Emisiones emitidas por el total de alimentos de la lista, en caso de que la lista sea de #Comida

Returns:

  • (Double)

    Emisiones totales de la lista de alimentos.



103
104
105
106
107
108
109
110
111
112
# File 'lib/practica6/lista.rb', line 103

def emisiones
	iterator= head
	emision= 0.0.to_d
	while iterator!= nil do
		emision= emision+ iterator.value.GEI.to_d
		iterator= iterator.next
	end

	return emision
end

#emisionestDouble

Emisiones anuales emitidas por el total de alimentos de la lista, en caso de que la lista sea de #Comida

Returns:

  • (Double)

    Emisiones totales de la lista de alimentos en un año.



119
120
121
# File 'lib/practica6/lista.rb', line 119

def emisionest
	return (emisiones* 365)
end

#pop_head<Template>

Extrae un nodo en la lista por la cabeza.

Returns:

  • (<Template>)

    Valor del nodo extraido



52
53
54
55
56
57
58
59
60
# File 'lib/practica6/lista.rb', line 52

def pop_head
	@head= @head.next unless @head== nil
	@head.prev= nil unless @head== nil
	@tail= nil if @head== nil
	if @size> 0
		@size= @size- 1
	end
	return nil
end

#pop_tail<Template>

Extrae un nodo en la lista por la cola.

Returns:

  • (<Template>)

    Valor del nodo extraido



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

def pop_tail
	@tail= @tail.prev unless @tail== nil
	@tail.next= nil unless @tail== nil
	@head= nil if @tail== nil
	if @size> 0
		@size= @size- 1
	end
	return nil
end

#push_head(valor) ⇒ Object

Introduce un elemento (nodo o valor) en la lista por la cabeza. Si el valor es un nodo, se incluye directamente. Si no lo es, primero se transforma en nodo y se incluye en la lista.

Parameters:

  • valor (<Template>)

    Nodo o valor a introducir en la lista.



32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/practica6/lista.rb', line 32

def push_head(valor)
	if valor.class== Node
		addedNode= valor
	else
		addedNode= Node.new(valor)
	end
	addedNode.prev= nil
	addedNode.next= @head
	@head.prev= addedNode unless @head.nil?
	@head= addedNode
	@tail= addedNode if @tail.nil?	
	@size= @size+ 1
	return nil
end

#push_tail(valor) ⇒ Object

Introduce un elemento (nodo o valor) en la lista por la cola. Si el valor es un nodo, se incluye directamente. Si no lo es, primero se transforma en nodo y se incluye en la lista.

Parameters:

  • valor (<Template>)

    Nodo o valor a introducir en la lista.



68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/practica6/lista.rb', line 68

def push_tail(valor)
	if valor.class== Node
		addedNode= valor
	else
		addedNode= Node.new(valor)
	end
	addedNode.next= nil
	addedNode.prev= @tail
	@tail.next= addedNode unless @tail.nil?
	@tail= addedNode
	@head= addedNode if @head.nil?	
	@size= @size+ 1
	return nil
end

#terrenoDouble

Coste de terreno en m2 del total de alimentos de la lista, en caso de que la lista sea de #Comida

Returns:

  • (Double)

    Coste de terreno en m2 de la lista de alimentos.



128
129
130
131
132
133
134
135
136
137
# File 'lib/practica6/lista.rb', line 128

def terreno
	iterator= head
	coste= 0.0.to_d
	while iterator!= nil do
		coste= coste+ iterator.value.GEI.to_d
		iterator= iterator.next
	end

	return coste
end