Class: List
Overview
Esta clase permite representar una lista doblemente enlazada con un head y un tail. Contiene metodos para el manejo de la misma facilmente. Se ha incluido el mixin Enumerable.
Instance Attribute Summary collapse
-
#head ⇒ Object
readonly
Permite acceder a los atributos de la clase en forma de lectura.
-
#tail ⇒ Object
readonly
Permite acceder a los atributos de la clase en forma de lectura.
Instance Method Summary collapse
-
#each ⇒ Object
Se incluye el metodo del mixin Enumerable Se define como una iteraciĆ³n sobre los nodos de la lista.
-
#empty ⇒ Object
Comprueba si la lista esta vacia y devuelve un boolean.
-
#extract_head ⇒ Object
Extrae el elemento que se encuentre en la cabeza de la lista.
-
#extract_tail ⇒ Object
Extrae el elemento que se encuentre en la cola de la lista.
-
#initialize ⇒ List
constructor
Se asignan los valores de la cabeza y cola de la lista, inicialmente no hay nada.
-
#insert_head(value) ⇒ Object
Inserta un valor por la cabeza a la lista.
-
#insert_tail(value) ⇒ Object
Inserta un valor por la cola a la lista.
-
#insert_values(vec) ⇒ Object
Permite insertar varios valores al mismo tiempo con una sola llamada.
Constructor Details
#initialize ⇒ List
Se asignan los valores de la cabeza y cola de la lista, inicialmente no hay nada.
17 18 19 20 |
# File 'lib/Alimento/List.rb', line 17 def initialize @head = nil @tail = nil end |
Instance Attribute Details
#head ⇒ Object (readonly)
Permite acceder a los atributos de la clase en forma de lectura.
12 13 14 |
# File 'lib/Alimento/List.rb', line 12 def head @head end |
#tail ⇒ Object (readonly)
Permite acceder a los atributos de la clase en forma de lectura.
12 13 14 |
# File 'lib/Alimento/List.rb', line 12 def tail @tail end |
Instance Method Details
#each ⇒ Object
Se incluye el metodo del mixin Enumerable Se define como una iteraciĆ³n sobre los nodos de la lista.
86 87 88 89 90 91 92 |
# File 'lib/Alimento/List.rb', line 86 def each nodoActual = @tail while nodoActual != nil yield nodoActual.value nodoActual = nodoActual.next end end |
#empty ⇒ Object
Comprueba si la lista esta vacia y devuelve un boolean.
51 52 53 54 55 56 57 |
# File 'lib/Alimento/List.rb', line 51 def empty if (@head == nil) true else false end end |
#extract_head ⇒ Object
Extrae el elemento que se encuentre en la cabeza de la lista.
67 68 69 70 71 72 73 |
# File 'lib/Alimento/List.rb', line 67 def extract_head aux = @head if (!empty()) @head = @head.prev end return aux end |
#extract_tail ⇒ Object
Extrae el elemento que se encuentre en la cola de la lista.
76 77 78 79 80 81 82 |
# File 'lib/Alimento/List.rb', line 76 def extract_tail aux = @tail if (!empty()) @tail = @tail.next end return aux end |
#insert_head(value) ⇒ Object
Inserta un valor por la cabeza a la lista.
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/Alimento/List.rb', line 23 def insert_head (value) newNode = Node.new(value, nil, nil) if (empty()) @head = newNode @tail = newNode else @head.next = newNode newNode.prev = @head @head = newNode end end |
#insert_tail(value) ⇒ Object
Inserta un valor por la cola a la lista.
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/Alimento/List.rb', line 37 def insert_tail (value) newNode = Node.new(value, nil, nil) if (empty) @head = newNode @tail = newNode else @tail.prev = newNode newNode.next = @tail @tail = newNode end end |
#insert_values(vec) ⇒ Object
Permite insertar varios valores al mismo tiempo con una sola llamada.
60 61 62 63 64 |
# File 'lib/Alimento/List.rb', line 60 def insert_values(vec) vec.each do |i| insert_head(i) end end |