class ListaDoble

Clase ListaDoble que representa una lista doblemente enlazada.

Attributes

head[R]

Puntero al nodo cabeza de la lista

tail[R]

Puntero al nodo cola de la lista

Public Class Methods

new() click to toggle source

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

each() { |value| ... } click to toggle source

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
extract_head() click to toggle source

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
extract_tail() click to toggle source

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
insert_head(*elementos) click to toggle source

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
insert_tail(*elementos) click to toggle source

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
is_empty?() click to toggle source

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
to_s() click to toggle source

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