Class: List
- Inherits:
-
Object
- Object
- List
- Includes:
- Enumerable
- Defined in:
- lib/InformacionNutricional/list.rb
Overview
Esta clase implementa una lista doblemente enlazada Se ha incluido el mixin Enumerable
Instance Attribute Summary collapse
-
#head ⇒ Object
readonly
Getters de las variables de instancia.
-
#size ⇒ Object
readonly
Getters de las variables de instancia.
-
#tail ⇒ Object
readonly
Getters de las variables de instancia.
Instance Method Summary collapse
-
#each ⇒ Object
Se incluye el método del mixin Enumerable Se define como una iteración c/u de los calores de los nodos.
-
#initialize ⇒ List
constructor
Creamos una lista vacía.
-
#insert_head(node) ⇒ Object
Método para insertar un nodo por la cabeza.
-
#insert_n_to_head(array) ⇒ Object
Método para insertar varios nodos por la cabeza.
-
#insert_n_to_tail(array) ⇒ Object
Método para insertar varios nodos por la cola.
-
#insert_tail(node) ⇒ Object
Método para insertar un nodo por la cola.
-
#is_empty ⇒ Object
Comprueba si la lista está vacía.
-
#remove_head ⇒ Object
Método para eliminar la cabeza.
-
#remove_n_from_head(qty) ⇒ Object
Método para eliminar varios nodos por la cabeza.
-
#remove_n_from_tail(qty) ⇒ Object
Método para eliminar varios nodos por la cola.
-
#remove_tail ⇒ Object
Método para eliminar la cola.
-
#sort_each ⇒ Object
Oredena la lista con each.
-
#sort_for ⇒ Object
Ordena la lista con for.
-
#to_s ⇒ Object
Override del to_s.
Constructor Details
#initialize ⇒ List
Creamos una lista vacía
18 19 20 21 |
# File 'lib/InformacionNutricional/list.rb', line 18 def initialize @tail = @head = nil @size = 0 end |
Instance Attribute Details
#head ⇒ Object (readonly)
Getters de las variables de instancia
15 16 17 |
# File 'lib/InformacionNutricional/list.rb', line 15 def head @head end |
#size ⇒ Object (readonly)
Getters de las variables de instancia
15 16 17 |
# File 'lib/InformacionNutricional/list.rb', line 15 def size @size end |
#tail ⇒ Object (readonly)
Getters de las variables de instancia
15 16 17 |
# File 'lib/InformacionNutricional/list.rb', line 15 def tail @tail end |
Instance Method Details
#each ⇒ Object
Se incluye el método del mixin Enumerable Se define como una iteración c/u de los calores de los nodos
134 135 136 137 138 139 140 141 |
# File 'lib/InformacionNutricional/list.rb', line 134 def each aux = @head sz = @size for i in (1..sz) yield aux.value aux = aux.next end end |
#insert_head(node) ⇒ Object
Método para insertar un nodo por la cabeza
35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/InformacionNutricional/list.rb', line 35 def insert_head(node) if is_empty new_node = Node.new(node,nil,nil) @head = new_node @tail = @head else new_node = Node.new(node,@head,nil) @head.prev = new_node @head = new_node end @size = @size + 1 end |
#insert_n_to_head(array) ⇒ Object
Método para insertar varios nodos por la cabeza
63 64 65 66 67 |
# File 'lib/InformacionNutricional/list.rb', line 63 def insert_n_to_head(array) array.each do |node| insert_head(node) end end |
#insert_n_to_tail(array) ⇒ Object
Método para insertar varios nodos por la cola
70 71 72 73 74 |
# File 'lib/InformacionNutricional/list.rb', line 70 def insert_n_to_tail(array) array.each do |node| insert_tail(node) end end |
#insert_tail(node) ⇒ Object
Método para insertar un nodo por la cola
49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/InformacionNutricional/list.rb', line 49 def insert_tail(node) if is_empty new_node = Node.new(node,nil,nil) @tail = new_node @head = @tail else new_node = Node.new(node,nil,@tail) @tail.next = new_node @tail = new_node end @size = @size + 1 end |
#is_empty ⇒ Object
Comprueba si la lista está vacía
24 25 26 27 28 29 30 31 32 |
# File 'lib/InformacionNutricional/list.rb', line 24 def is_empty empty = "" if (@head == nil) empty = true else empty = false end empty end |
#remove_head ⇒ Object
Método para eliminar la cabeza
77 78 79 80 81 82 83 84 85 86 |
# File 'lib/InformacionNutricional/list.rb', line 77 def remove_head if @size == 1 @head = nil @tail = @head else @head = @head.next @head.prev = nil end @size = @size - 1 end |
#remove_n_from_head(qty) ⇒ Object
Método para eliminar varios nodos por la cabeza
101 102 103 104 105 106 107 |
# File 'lib/InformacionNutricional/list.rb', line 101 def remove_n_from_head(qty) times = 0 while times < qty && @size > 0 remove_head times = times + 1 end end |
#remove_n_from_tail(qty) ⇒ Object
Método para eliminar varios nodos por la cola
110 111 112 113 114 115 116 |
# File 'lib/InformacionNutricional/list.rb', line 110 def remove_n_from_tail(qty) times = 0 while times < qty && @size > 0 remove_tail times = times + 1 end end |
#remove_tail ⇒ Object
Método para eliminar la cola
89 90 91 92 93 94 95 96 97 98 |
# File 'lib/InformacionNutricional/list.rb', line 89 def remove_tail if @size == 1 @tail = nil @head = @tail else @tail = @tail.prev @tail.next = nil end @size = @size - 1 end |
#sort_each ⇒ Object
Oredena la lista con each
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/InformacionNutricional/list.rb', line 163 def sort_each sorted = [@head.value] self.each_with_index do |x, pos_x| if (pos_x != 0) sorted.each_with_index do |y, pos_y| if (pos_y == sorted.size - 1) if (x < y) sorted.insert(pos_y, x) break else sorted.push(x) break end elsif (x < y) sorted.insert(pos_y, x) break end end end end return sorted end |
#sort_for ⇒ Object
Ordena la lista con for
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/InformacionNutricional/list.rb', line 144 def sort_for sorted = [@head.value] aux = @head sz = @size for i in (1...sz) aux = aux.next for j in (0..sorted.size) if (j == sorted.size) sorted.push(aux.value) elsif (aux.value < sorted[j]) sorted.insert(j, aux.value) break end end end return sorted end |
#to_s ⇒ Object
Override del to_s
119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/InformacionNutricional/list.rb', line 119 def to_s array = "" node = @head while node != nil array += "#{node.value.name}" if node.next != nil array += ", " end node = node.next end array end |