class ListaDoble
Clase ListaDoble
que representa una lista doblemente enlazada.
Attributes
Puntero al nodo cabeza de la lista
Puntero al nodo cola de la lista
Public Class Methods
Inicializa la cabeza y la cola a nil, para poder tener una lista vacía, sin nodos
# File lib/prct06/listadoble.rb, line 16 def initialize @head = nil @tail = nil end
Public Instance Methods
Recorre la lista, permite utilizar las funciones del módulo Enumerable
# File lib/prct06/listadoble.rb, line 132 def each nodo=@head while nodo!=nil do yield nodo.value nodo=nodo.prev end end
Extrae un elemento por la cabeza, devolviendo el valor en sí y no el nodo (que se elimina)
# File lib/prct06/listadoble.rb, line 63 def extract_head if (@head!=nil) nodo = head @head = @head.prev if (@head != nil) @head.next=nil else @tail=nil end return nodo.value else return nil end end
Extrae un elemento por la cola, devolviendo el valor en sí y no el nodo (que se elimina)
# File lib/prct06/listadoble.rb, line 84 def extract_tail if (@tail!=nil) nodo = @tail @tail = @tail.next if (@tail != nil) @tail.prev=nil else @head=nil end return nodo.value else return nil end end
Inserta un elemento de cualquier tipo por la cabeza, creando un nodo internamente
# File lib/prct06/listadoble.rb, line 44 def insert_head (*elementos) elementos.each do |i| nodo = NodeLD.new(i, @head, nil) if (@head != nil) @head.next = nodo @head = nodo else @tail = nodo @head = nodo end end end
Inserta un elemento de cualquier tipo por la cola, creando un nodo internamente
# File lib/prct06/listadoble.rb, line 24 def insert_tail (*elementos) elementos.each do |i| nodo = NodeLD.new(i, nil, @tail) if (@tail != nil) @tail.prev = nodo @tail = nodo else @tail = nodo @head = nodo end end end
Indica si la lista está vacía o no
# File lib/prct06/listadoble.rb, line 105 def is_empty? if (@head==nil)&&(@tail==nil) return true else return false end end
Imprime la lista doblemente enlazada con el formato adecuado, elemento por elemento, desde la cola en adelante
# File lib/prct06/listadoble.rb, line 116 def to_s nodo = @tail cadena = "" cont = 1 while nodo!=nil do cadena += "#{cont}) #{nodo.value}\n" nodo = nodo.next cont+=1 end cadena end