Class: Lista

Inherits:
Object
  • Object
show all
Includes:
Comparable, Enumerable
Defined in:
lib/nutrientes/lista.rb

Overview

Clase que representa una lista doblemente enlazada

Instance Method Summary collapse

Constructor Details

#initializeLista

Returns a new instance of Lista.



6
7
8
9
# File 'lib/nutrientes/lista.rb', line 6

def initialize
  @cabeza = nil
  @cola = nil
end

Instance Method Details

#eachObject

Itera todos los elementos de la lista



84
85
86
87
88
89
90
# File 'lib/nutrientes/lista.rb', line 84

def each
  nodo_actual = @cabeza
  1.upto(numero_nodos) do
    yield nodo_actual.valor
    nodo_actual = nodo_actual.siguiente
  end
end

#extraer_cabezaObject

Extrae el primer elemento de la lista

Returns:

  • (Object)

    el primer elemento de la lista o nil si esta vacia



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

def extraer_cabeza
  if @cabeza.nil?
    nil
  else
    antigua_cabeza = @cabeza
    siguiente = @cabeza.siguiente
    if siguiente.nil?
      @cabeza = nil
      @cola = nil
    else
      siguiente.previo = nil
      @cabeza = siguiente
    end
    antigua_cabeza.valor
  end
end

#extraer_colaObject

Extrae el ultimo elemento de la lista

Returns:

  • (Object)

    el ultimo elemento de la lista o nil si esta vacia



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/nutrientes/lista.rb', line 54

def extraer_cola
  if @cola.nil?
    nil
  else
    antigua_cola = @cola
    previo = @cola.previo
    if previo.nil?
      @cabeza = nil
      @cola = nil
    else
      previo.previo = nil
      @cola = previo
    end
    antigua_cola.valor
  end
end

#insertar(elemento) ⇒ Object

Inserta un elemento en la lista

Parameters:

  • elemento (Object)

    el elemento



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/nutrientes/lista.rb', line 13

def insertar(elemento)
  nodo = Nodo.new
  nodo.valor = elemento
  if @cabeza.nil?
    @cabeza = nodo
    @cola = nodo
  else
    @cola.siguiente = nodo
    nodo.previo = @cola
    @cola = nodo
  end
end

#insertar_a(elementos) ⇒ Object

Inserta varios elementos en la lista

Parameters:

  • elementos (Array)

    el array de elementos

Raises:

  • (ArgumentError)


28
29
30
31
# File 'lib/nutrientes/lista.rb', line 28

def insertar_a(elementos)
  raise ArgumentError, "elementos no es un array" unless elementos.is_a? Array
  elementos.each {|e| insertar e}
end

#numero_nodosNumeric

Obtiene el numero de elementos en la lista

Returns:

  • (Numeric)

    el numero de elementos



73
74
75
76
77
78
79
80
81
# File 'lib/nutrientes/lista.rb', line 73

def numero_nodos
  nodo_actual = @cabeza
  numero_nodos = 0
  while nodo_actual != nil do
    nodo_actual = nodo_actual.siguiente
    numero_nodos += 1
  end
  numero_nodos
end