class List

Esta clase permite representar una lista doblemente enlazada. Se ha incluido el módulo Enumerable.

Attributes

head[RW]
tail[RW]

Public Class Methods

new() click to toggle source

Se asignan el valor del head y el tail de la lista, que inicialmente es nil.

# File lib/P06/list.rb, line 18
def initialize
   @head = nil
   @tail = nil
end

Public Instance Methods

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

Este metodo es el each que van a utilizar los metodos del módulo Enumerable, pero esta acomodado a nuestra clase.

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

Nos devuelve el nodo siguiente de un nodo que le pasamos por parámetros.

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

Devuelve el nodo previo al nodo que pasamos por parámetros.

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

Devuelve el valor de un nodo que le pasamos por parametros.

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

Este metodo nos permite extraer el head de la lista.

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

Este metodo nos permite extraer el tail de la lista.

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

Inseta un valor por la cabeza de la lista.

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

Este metodo nos permite insertar varios valores a la lista. Estos valores se insertan por el head.

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

Este metodo nos devuelve el tamaño de la lista.

# 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