Class: List

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/practica6/list.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeList

Returns retorna una nueva instancia de Lista.



6
7
8
9
10
# File 'lib/practica6/list.rb', line 6

def initialize()
  @head = nil
  @tail = nil
  @size = 0
end

Instance Attribute Details

#headObject (readonly)

Returns the value of attribute head.



3
4
5
# File 'lib/practica6/list.rb', line 3

def head
  @head
end

#sizeObject (readonly)

Returns the value of attribute size.



3
4
5
# File 'lib/practica6/list.rb', line 3

def size
  @size
end

#tailObject (readonly)

Returns the value of attribute tail.



3
4
5
# File 'lib/practica6/list.rb', line 3

def tail
  @tail
end

Instance Method Details

#[](position) ⇒ Struct

Returns retorna un struct que en el que está encapsulado el nodo.

Parameters:

  • position (Number)

    recibe como parámetro la posición de la lista a inspeccionar.

Returns:

  • (Struct)

    retorna un struct que en el que está encapsulado el nodo.



83
84
85
86
87
88
89
# File 'lib/practica6/list.rb', line 83

def [](position)
  aux = @head
    position.times do
      aux = aux.next
    end
  aux
end

#clasificar_etiquetasStruct

Returns:

  • (Struct)


129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/practica6/list.rb', line 129

def clasificar_etiquetas
ordenado = false
aux_ = @head
while ordenado != true do
  ordenado = true
  i = 0
  aux = @head
  (@size - 1).times do
    if aux.value.sal > aux.next.value.sal
       self.swap(aux, aux.next)
       ordenado = false
       aux = aux.prev
      end
    aux = aux.next
    end
  end

end

#clasificar_imcStruct

Returns:

  • (Struct)


149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'lib/practica6/list.rb', line 149

def clasificar_imc
  ordenado = false
  aux_ = @head
  while ordenado != true do
    ordenado = true
    i = 0
    aux = @head
    (@size - 1).times do
      if aux.value.registro.imc > aux.next.value.registro.imc
         self.swap(aux, aux.next)
         ordenado = false
         aux = aux.prev
        end
      aux = aux.next
      end
    end
end

#eachList

Returns método each implementado para el correcto funcionamiento del módulo Enumerable.

Returns:

  • (List)

    método each implementado para el correcto funcionamiento del módulo Enumerable.



13
14
15
16
17
18
19
# File 'lib/practica6/list.rb', line 13

def each()
  head_aux = @head
  while head_aux != nil do
    yield head_aux.value
    head_aux = head_aux.next
  end
end

#pop_backNumber

Returns Retorna el tamaño de la lista tras decrementarse esta.

Returns:

  • (Number)

    Retorna el tamaño de la lista tras decrementarse esta.



72
73
74
75
76
77
78
79
# File 'lib/practica6/list.rb', line 72

def pop_back()
  aux = @tail
  @tail = @tail.prev
  @tail.next = nil
  aux.next = nil
  aux.prev = nil
  @size -= 1
end

#pop_frontNumber

Returns Retorna el tamaño de la lista tras decrementarse esta.

Returns:

  • (Number)

    Retorna el tamaño de la lista tras decrementarse esta.



62
63
64
65
66
67
68
69
# File 'lib/practica6/list.rb', line 62

def pop_front()
  aux = @head
  @head = @head.next
  @head.prev = nil
  aux.prev = nil
  aux.next = nil
  @size -= 1
end

#push_back(etiqueta) ⇒ Number

Returns Retorna el tamaño de la lista tras expandirse esta.

Parameters:

  • etiqueta (Etiqueta)

    Recibe como parámetro una etiqueta que pasará a ser el valor de un nodo construido a posteriori.

Returns:

  • (Number)

    Retorna el tamaño de la lista tras expandirse esta.



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/practica6/list.rb', line 23

def push_back(etiqueta)

  node = Struct.new(:prev, :next, :value).new(nil,nil,etiqueta)

  if @size == 0
      @tail = node
      @head = node
  else
    aux = @tail
    @tail = node
    @tail.prev = aux
    aux.next = tail
  end

  @size += 1

end

#push_front(etiqueta) ⇒ Number

Returns Retorna el tamaño de la lista tras expandirse esta.

Parameters:

  • etiqueta (Etiqueta)

    Recibe como parámetro una etiqueta que pasará a ser el valor de un nodo construido a posteriori.

Returns:

  • (Number)

    Retorna el tamaño de la lista tras expandirse esta.



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/practica6/list.rb', line 43

def push_front(etiqueta)

  node = Struct.new(:prev, :next, :value).new(nil,nil,etiqueta)

  if @size == 0
      @tail = node
      @head = node
  else
    aux = @head
    @head = node
    @head.next = aux
    aux.prev = @head
  end

  @size += 1

end

#swap(a, b) ⇒ Struct

Parameters:

  • a (Struct)

    nodo a intercambiar.

  • b (Struct)

    nodo a intercambiar.

Returns:

  • (Struct)


94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/practica6/list.rb', line 94

def swap(a,b)

if @size == 2
  a.prev = b
  b.next = a
  @tail = a
  @head = b
elsif a == @head
  a.next = b.next
  b.prev = nil
  b.next.prev = a
  a.prev = b
  b.next = a
  @head = b
elsif b == @tail
  a.next = nil
  b.prev = a.prev
  a.prev.next = b
  a.prev = b
  b.next = a
  @tail = a
else
  a.next = b.next
  b.prev = a.prev
  a.prev.next = b
  b.next.prev = a
  a.prev = b
  b.next = a
end



end

#to_sString

Returns retorna una cadena con la información de todos los nodos de la lista.

Returns:

  • (String)

    retorna una cadena con la información de todos los nodos de la lista.



168
169
170
171
172
173
174
175
176
# File 'lib/practica6/list.rb', line 168

def to_s
  aux_ = @head
  s = ""
  while aux_ != nil do
    s << aux_.value.to_s
    aux_ = aux_.next
  end
  s
end