Class: Lista
Overview
Clase gestora de Lista doblemente enlazada.
Instance Attribute Summary collapse
-
#cabeza ⇒ Object
Returns the value of attribute cabeza.
-
#cola ⇒ Object
Returns the value of attribute cola.
-
#total ⇒ Object
Returns the value of attribute total.
Instance Method Summary collapse
-
#<<(p) ⇒ Object
Sobrecarga del operador << para insertar una pregunta al final de la lista.
-
#each ⇒ Object
Definición del método :each para el manejo de métodos del módulo Enumerable.
-
#initialize(p) ⇒ Lista
constructor
Instancia de la clase Lista a partir de una Pregunta.
-
#inv(&block) ⇒ Object
Devuelve la lista actual invertida.
-
#pop ⇒ Object
Extrae la cabeza de la lista actualmente.
-
#push_back(*preguntas) ⇒ Object
Inserta una o varias preguntas sucesivamente.
-
#to_s ⇒ Object
Definición del Metotodo to_s, para la clase Lista.
Constructor Details
#initialize(p) ⇒ Lista
Instancia de la clase Lista a partir de una Pregunta.
13 14 15 16 17 18 |
# File 'lib/examen/lista.rb', line 13 def initialize(p) raise TypeError, "Esperada pregunta como parámetro de entrada" unless p.is_a? (Pregunta) @cabeza = Nodo.new(p, nil, nil) @cola = @cabeza @total = 1 end |
Instance Attribute Details
#cabeza ⇒ Object
Returns the value of attribute cabeza.
8 9 10 |
# File 'lib/examen/lista.rb', line 8 def cabeza @cabeza end |
#cola ⇒ Object
Returns the value of attribute cola.
8 9 10 |
# File 'lib/examen/lista.rb', line 8 def cola @cola end |
#total ⇒ Object
Returns the value of attribute total.
8 9 10 |
# File 'lib/examen/lista.rb', line 8 def total @total end |
Instance Method Details
#<<(p) ⇒ Object
Sobrecarga del operador << para insertar una pregunta al final de la lista.
39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/examen/lista.rb', line 39 def <<(p) raise TypeError, "Esperada pregunta para inserción" unless p.is_a? (Pregunta) if (@total == 0) @cabeza = Nodo.new(p, nil, nil) @cola = @cabeza else @cola.next = Nodo.new(p, nil, @cola) @cola = @cola.next @cola.value end @total += 1 end |
#each ⇒ Object
Definición del método :each para el manejo de métodos del módulo Enumerable.
81 82 83 84 85 86 87 |
# File 'lib/examen/lista.rb', line 81 def each aux = @cabeza while (aux != nil) do yield aux.value aux = aux.next end end |
#inv(&block) ⇒ Object
Devuelve la lista actual invertida.
90 91 92 93 94 95 96 |
# File 'lib/examen/lista.rb', line 90 def inv(&block) block = ->(x) {true} if !block_given? list = invertir(@cabeza, &block) list.pop return nil if list.total == 0 list end |
#pop ⇒ Object
Extrae la cabeza de la lista actualmente. Si la lista está vacía genera una excepción (IndexError).
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/examen/lista.rb', line 21 def pop raise IndexError, "Lista vacía, imposible hacer pop" unless @total > 0 head = nil if @cola == @cabeza head = @cabeza @cola = @cabeza = nil head.next = head.prev = nil else head = @cabeza @cabeza = @cabeza.next @cabeza.prev = nil head.next = nil end @total -= 1 head.value end |
#push_back(*preguntas) ⇒ Object
Inserta una o varias preguntas sucesivamente.
53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/examen/lista.rb', line 53 def push_back(*preguntas) preguntas.each do |p| if (@total == 0) @cabeza = Nodo.new(p, nil, nil) @cola = @cabeza else @cola.next = Nodo.new(p, nil, @cola) @cola = @cola.next end @total += 1 end preguntas end |
#to_s ⇒ Object
Definición del Metotodo to_s, para la clase Lista.
68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/examen/lista.rb', line 68 def to_s aux = @cabeza s = '' i = 1 while (aux != nil) do s += "#{i}.-) #{aux.value}\n" aux = aux.next i += 1 end s end |