Class: List
Overview
Esta clase permite representar una lista doblemente enlazada. Se ha incluido el módulo Enumerable.
Instance Attribute Summary collapse
-
#head ⇒ Object
Returns the value of attribute head.
-
#tail ⇒ Object
Returns the value of attribute tail.
Instance Method Summary collapse
-
#each ⇒ Object
Este metodo es el each que van a utilizar los metodos del módulo Enumerable, pero esta acomodado a nuestra clase.
-
#get_next(value) ⇒ Object
Nos devuelve el nodo siguiente de un nodo que le pasamos por parámetros.
-
#get_prev(value) ⇒ Object
Devuelve el nodo previo al nodo que pasamos por parámetros.
-
#get_value(value) ⇒ Object
Devuelve el valor de un nodo que le pasamos por parametros.
-
#initialize ⇒ List
constructor
Se asignan el valor del head y el tail de la lista, que inicialmente es nil.
-
#pop_head ⇒ Object
Este metodo nos permite extraer el head de la lista.
-
#pop_tail ⇒ Object
Este metodo nos permite extraer el tail de la lista.
-
#push_head(nodo) ⇒ Object
Inseta un valor por la cabeza de la lista.
-
#push_others(values) ⇒ Object
Este metodo nos permite insertar varios valores a la lista.
-
#size ⇒ Object
Este metodo nos devuelve el tamaño de la lista.
Constructor Details
#initialize ⇒ List
Se asignan el valor del head y el tail de la lista, que inicialmente es nil.
18 19 20 21 |
# File 'lib/P06/list.rb', line 18 def initialize @head = nil @tail = nil end |
Instance Attribute Details
#head ⇒ Object
Returns the value of attribute head.
14 15 16 |
# File 'lib/P06/list.rb', line 14 def head @head end |
#tail ⇒ Object
Returns the value of attribute tail.
14 15 16 |
# File 'lib/P06/list.rb', line 14 def tail @tail end |
Instance Method Details
#each ⇒ Object
Este metodo es el each que van a utilizar los metodos del módulo Enumerable, pero esta acomodado a nuestra clase.
154 155 156 157 158 159 160 |
# File 'lib/P06/list.rb', line 154 def each i = @tail while i != nil yield i.value i = i.next end end |
#get_next(value) ⇒ Object
Nos devuelve el nodo siguiente de un nodo que le pasamos por parámetros.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/P06/list.rb', line 54 def get_next(value) if @head == nil #Comprobamos si la lista no esta vacía raise RuntimeError, "Lista vacía, no se puede extraer nodo" else i = @tail @valor = nil while i != nil if i.value == value @valor = i.next end i = i.next end end @valor end |
#get_prev(value) ⇒ Object
Devuelve el nodo previo al nodo que pasamos por parámetros.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/P06/list.rb', line 72 def get_prev(value) if @head == nil #Comprobamos si la lista no esta vacía raise RuntimeError, "Lista vacía, no se puede extraer nodo" else i = @tail @valor = nil while i != nil if i.value == value @valor = i.prev end i = i.next end end @valor end |
#get_value(value) ⇒ Object
Devuelve el valor de un nodo que le pasamos por parametros.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/P06/list.rb', line 36 def get_value(value) if @head == nil #Comprobamos si la lista no esta vacía raise RuntimeError, "Lista vacía, no se puede extraer nodo" else i = @tail @valor=nil while i != nil if i.value == value @valor = i.value end i = i.next end end @valor end |
#pop_head ⇒ Object
Este metodo nos permite extraer el head de la lista.
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/P06/list.rb', line 132 def pop_head extraido = false if @head == nil #Comprobamos si la lista no esta vacía raise RuntimeError, "Lista vacía, no se puede extraer nodo" else extraido = true if @head == @tail @head = nil @tail = nil else @head = @head.prev @head.next = nil end end return extraido end |
#pop_tail ⇒ Object
Este metodo nos permite extraer el tail de la lista.
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/P06/list.rb', line 111 def pop_tail extraido = false if @head == nil #Comprobamos si la lista no esta vacía raise RuntimeError, "Lista vacía, no se puede extraer nodo" else extraido = true if @head == @tail @head = nil @tail = nil else @tail = @tail.next @tail.prev = nil end end return extraido end |
#push_head(nodo) ⇒ Object
Inseta un valor por la cabeza de la lista.
24 25 26 27 28 29 30 31 32 |
# File 'lib/P06/list.rb', line 24 def push_head (nodo) if @head == nil @head = Nodo.new(nodo,nil,nil) @tail = @head else @head.next = Nodo.new(nodo,nil,@head) @head = @head.next end end |
#push_others(values) ⇒ Object
Este metodo nos permite insertar varios valores a la lista. Estos valores se insertan por el head.
103 104 105 106 107 |
# File 'lib/P06/list.rb', line 103 def push_others(values) for i in (0..values.size-1) push_head(values[i]) end end |
#size ⇒ Object
Este metodo nos devuelve el tamaño de la lista.
90 91 92 93 94 95 96 97 98 |
# File 'lib/P06/list.rb', line 90 def size size = 0 i = @tail while i != nil i = i.next size+=1 end return size end |