Class: Lista
- Inherits:
-
Object
- Object
- Lista
- Includes:
- Enumerable
- Defined in:
- lib/lista.rb,
lib/nutrientesEugenio/version.rb
Overview
Representación de una lista doblemente enlazada de nodos
Direct Known Subclasses
Constant Summary collapse
- VERSION =
Version de la clase Lista
"0.1.0"
Instance Attribute Summary collapse
- #head ⇒ Object readonly
-
#Node ⇒ Object
readonly
head Nodo en la cabeza de la lista.
- #tail ⇒ Object readonly
Instance Method Summary collapse
-
#each ⇒ Node
Método para la enumeración de los nodos de la lista.
-
#ordenar ⇒ vector
Ordena los alimentos en base a sus calorias.
-
#ordenar_por ⇒ vector
Ordena los alimentos en base a un bloque.
-
#pop_head ⇒ any?
Extracción del primer nodo de la lista.
-
#pop_tail ⇒ any?
Extracción del último nodo de la lista.
-
#push(x) ⇒ Node
Inserción por la cola de la lista de varios nodos.
-
#push_head(x) ⇒ Node
Inserción por la cabeza de la lista.
-
#push_tail(x) ⇒ Node
Inserción por la cola de la lista.
-
#to_s ⇒ String
Convierte el objeto a una cadena de caracteres.
Instance Attribute Details
#head ⇒ Object (readonly)
25 26 27 |
# File 'lib/lista.rb', line 25 def head @head end |
#Node ⇒ Object (readonly)
head Nodo en la cabeza de la lista
23 24 25 |
# File 'lib/lista.rb', line 23 def Node @Node end |
#tail ⇒ Object (readonly)
25 26 27 |
# File 'lib/lista.rb', line 25 def tail @tail end |
Instance Method Details
#each ⇒ Node
Método para la enumeración de los nodos de la lista
46 47 48 49 50 51 52 |
# File 'lib/lista.rb', line 46 def each x = @head while(x != nil) yield x.value x = x.next end end |
#ordenar ⇒ vector
Ordena los alimentos en base a sus calorias
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/lista.rb', line 120 def ordenar rvector = [] j = 0 each do |i| rvector[j] = i j +=1 end begin intercambio = false (rvector.count-1).times do |i| if rvector[i].sal > rvector[i+1].sal # Si se cumple la condición, entonces intercambiamos. rvector.swap(i,i+1) intercambio = true end # if next end # times end while intercambio == true rlist = Lista.new() rlist.push(rvector) rlist end |
#ordenar_por ⇒ vector
Ordena los alimentos en base a un bloque
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/lista.rb', line 145 def ordenar_por rvector = [] j = 0 each do |i| rvector[j] = i j +=1 end begin intercambio = false (rvector.count-1).times do |i| x = yield rvector[i] y = yield rvector[i+1] if x > y # Si se cumple la condición, entonces intercambiamos. rvector.swap(i,i+1) intercambio = true end # if next end # times end while intercambio == true rlist = Lista.new() rlist.push(rvector) rlist end |
#pop_head ⇒ any?
Extracción del primer nodo de la lista
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/lista.rb', line 82 def pop_head() if(@head == nil) return nil end x = @head @head = @head.next if(@head == nil) @tail = nil else @head.prev = nil x.next = nil end x.value end |
#pop_tail ⇒ any?
Extracción del último nodo de la lista
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/lista.rb', line 101 def pop_tail() if(@tail == nil) return nil end x = @tail @tail = @tail.prev if(@tail == nil) @head = nil else @tail.next = nil x.prev = nil end x.value end |
#push(x) ⇒ Node
Inserción por la cola de la lista de varios nodos
74 75 76 77 78 |
# File 'lib/lista.rb', line 74 def push(x) x.each{ |i| push_tail(i) } end |
#push_head(x) ⇒ Node
Inserción por la cabeza de la lista
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/lista.rb', line 31 def push_head(x) if(@head == nil) @head = Node.new(x, nil, nil) @tail = @head else nuevo = Node.new(x, nil, nil) nuevo.next= @head @head.prev = nuevo @head = nuevo end end |
#push_tail(x) ⇒ Node
Inserción por la cola de la lista
58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/lista.rb', line 58 def push_tail(x) if(@tail == nil) @tail = Node.new(x, nil, nil) @head = @tail else nuevo = Node.new(x, nil, nil) nuevo.prev = @tail @tail.next = nuevo @tail = nuevo end end |
#to_s ⇒ String
Convierte el objeto a una cadena de caracteres
172 173 174 175 176 |
# File 'lib/lista.rb', line 172 def to_s s = "" each {|i| s += "#{i.to_s}\n"} s end |