Class: Lista

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/examen/lista.rb

Overview

Clase gestora de Lista doblemente enlazada.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(p) ⇒ Lista

Instancia de la clase Lista a partir de una Pregunta.

Raises:

  • (TypeError)


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

#cabezaObject

Returns the value of attribute cabeza.



8
9
10
# File 'lib/examen/lista.rb', line 8

def cabeza
  @cabeza
end

#colaObject

Returns the value of attribute cola.



8
9
10
# File 'lib/examen/lista.rb', line 8

def cola
  @cola
end

#totalObject

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.

Raises:

  • (TypeError)


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

#eachObject

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

#popObject

Extrae la cabeza de la lista actualmente. Si la lista está vacía genera una excepción (IndexError).

Raises:

  • (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_sObject

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