Class: Lista

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeList

Crea una lista vacía.



22
23
24
25
26
# File 'lib/huella_nutricional/lista.rb', line 22

def initialize()
	@head = nil
	@tail = nil
	@sz = 0
end

Instance Attribute Details

#headObject (readonly)

Returns the value of attribute head.



17
18
19
# File 'lib/huella_nutricional/lista.rb', line 17

def head
  @head
end

#szObject (readonly)

Returns the value of attribute sz.



17
18
19
# File 'lib/huella_nutricional/lista.rb', line 17

def sz
  @sz
end

#tailObject (readonly)

Returns the value of attribute tail.



17
18
19
# File 'lib/huella_nutricional/lista.rb', line 17

def tail
  @tail
end

Instance Method Details

#delete(posicion) ⇒ Object

Elimina un elemento en una posición concreta de la lista.

Parameters:

  • posicion (Fixnum)

    posición del elemento que se quiere eliminar.



174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/huella_nutricional/lista.rb', line 174

def delete(posicion)
 if posicion.is_a? Integer

  if posicion == 0 
  	pop_head
  elsif posicion == (@sz - 1)
      pop_tail
  elsif posicion < (@sz - 1) && posicion > 0
      iterator = @head
      posicion.times do |i|
      iterator = iterator.next
  end   

  iterator.next.prev = iterator.prev
  iterator.prev.next = iterator.next
  @sz = @sz - 1

  end
 end
   
 return nil
end

#eachObject

Metodo para enumerar la lista, poder aplicarle metodos de ordenacion, como collect,sort… todos del modulo enumerable



158
159
160
161
162
163
164
# File 'lib/huella_nutricional/lista.rb', line 158

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

#insert(value, posicion) ⇒ Object

Parameters:

  • posicion (Fixnum)

    posición en la que se quiere insertar el elemento.

  • value

    valor o nodo que se quiere incluir.



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/huella_nutricional/lista.rb', line 79

def insert(value,posicion)
	if posicion.is_a? Integer
			if posicion == 0 
push_head(value)
			elsif posicion == @sz
push_tail(value)
			elsif posicion < @sz && posicion > 0
if value.class == Node
	addedNode = value
else
	addedNode = Node.new(value)
end
iterator = @head
posicion.times do |i|
	iterator = iterator.next
end		
addedNode.prev = iterator.prev
addedNode.next = iterator
iterator.prev = addedNode
addedNode.prev.next = addedNode
@sz = @sz + 1
			end
		end
end

#pop_headObject



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/huella_nutricional/lista.rb', line 107

def pop_head

		if(@head == nil)
			return nil
	else
  val= @head
  node = @head.next
  @head = node
  if @head != nil
    	@head.prev = nil
  else
  	@tail = nil
  end
  @sz = @sz -1
		end

		return val
end

#pop_tailObject

Elimina un elemento del final de la lista.



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/huella_nutricional/lista.rb', line 129

def pop_tail
	if(@tail == nil)
    	return nil
  	else
    	val= @tail
    	node = @tail.prev
    	@tail = node
    	if @tail != nil
      		@tail.next = nil
   	 	else
    		@head = nil
    	end
    	@sz = @sz -1
    end

    return val
end

#push_head(value) ⇒ Object

Inserta un valor al principio de la lista.

Parameters:

  • value

    valor o nodo que se introduce en la lista.



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/huella_nutricional/lista.rb', line 32

def push_head(value)

  if value.class == Nodo
    added_node = value
  else
    added_node = Nodo.new(value)
  end

  added_node.prev = nil
  added_node.next = @head

  @head.prev = added_node unless @head.nil?
  @head = added_node

  @tail = added_node if @tail.nil? 
  @sz = @sz + 1
  return nil
  
end

#push_tail(value) ⇒ Object

Parameters:

  • value

    valor o nodo que se introduce en la lista.



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/huella_nutricional/lista.rb', line 56

def push_tail(value)
 if value.class == Nodo
    added_node = value
  else
    added_node = Node.new(value)
  end

  added_node.next = nil
  added_node.prev = @tail

  @tail.next = added_node unless @tail.nil?
  @tail = added_node
  @head = added_node if @head.nil? 
  @sz = @sz + 1

  return nil
end

#sizeObject



166
167
168
# File 'lib/huella_nutricional/lista.rb', line 166

def size
	return @sz
end

#to_sObject



151
152
153
154
155
# File 'lib/huella_nutricional/lista.rb', line 151

def to_s
	s = ""
    each {|i| s += "#{i.nombre_alimento.to_s}\n"}
    s
end