Class: Alimentos::Lista

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

Overview

Encargada de la representacion de una lista doblemente elazada

Author:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeLista

Crea un lista vacia, con una cabeza nula y una cola nula, ademas de un tamaño 0



101
102
103
104
105
106
# File 'lib/alimentos.rb', line 101

def initialize
  @lista = []
  @cabeza = nil
  @cola = nil
  @tam = 0
end

Instance Attribute Details

#cabezaObject (readonly)

Returns the value of attribute cabeza.



96
97
98
# File 'lib/alimentos.rb', line 96

def cabeza
  @cabeza
end

#colaObject (readonly)

Returns the value of attribute cola.



96
97
98
# File 'lib/alimentos.rb', line 96

def cola
  @cola
end

#listaObject (readonly)

Returns the value of attribute lista.



96
97
98
# File 'lib/alimentos.rb', line 96

def lista
  @lista
end

#tamObject (readonly)

Returns the value of attribute tam.



96
97
98
# File 'lib/alimentos.rb', line 96

def tam
  @tam
end

Instance Method Details

#extract_headInt

Extrae la cabeza de la lista modificado el 2 miembro.

Returns:

  • (Int)

    Devuelve el tamaño nuevo de la lista



134
135
136
137
138
139
140
141
142
143
144
# File 'lib/alimentos.rb', line 134

def extract_head
  @tam -= 1
  aux = @cabeza
  @lista.slice!(0)
  if @tam != 0
    @lista[0].prev = nil
    @cabeza = @lista[0]
    @cola = @lista[@tam - 1]
  end
  aux
end

#extract_tailInt

Extrae la cola de la lista modificado el antepenultimo miembro.

Returns:

  • (Int)

    Devuelve el tamaño nuevo de la lista



151
152
153
154
155
156
157
158
159
160
# File 'lib/alimentos.rb', line 151

def extract_tail
  aux = @cola
  @lista.slice!(@tam - 1)
  @tam -= 1
  if @tam != 0
    @lista[@tam - 1].next = nil
    @cola = @lista[@tam - 1]
  end
  aux
end

#insert(nodo) ⇒ Int

Inserta un nodo por la cola de la lista, cambiando la cola del ultimo nodo y poniendo la del suyo propio a 0

Parameters:

  • nodo (Node)

    Nodo que se va a insertar a la lista

Returns:

  • (Int)

    Devuelve el tamaño nuevo de la lista



115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/alimentos.rb', line 115

def insert(nodo)
  node = Struct.new(:value, :next, :prev)
  if @cabeza == nil
    @lista[@tam] = node.new(nodo, nil, nil)
    @cabeza = @lista[0]
    @cola = @lista[0]
  else
    @lista[@tam] = node.new(nodo, nil, @lista[@tam - 1])
    @lista[@tam - 1].next = @lista[@tam]
    @cola = @lista[@tam]
  end
  @tam += 1
end