class List

Define una clase de lista doblemente enlazada

Attributes

head[RW]
tail[RW]

Public Class Methods

new() click to toggle source

Constructor de la clase, crea una lista vacía

# File lib/dieta/lista.rb, line 8
def initialize
        # Atributo que es igual al primer elemento de la lista
        @head = nil
        # Atributo que es igual al último elemento de la lista
        @tail = nil
end

Public Instance Methods

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

Recorre los elementos del vector para poder usar los funciones Enumerable

# File lib/dieta/lista.rb, line 89
def each
        aux = @head
        while aux != nil
                yield aux.value
                aux = aux.next
        end
end
empty() click to toggle source

Devuleve true si la lista está vacía y false si contiene al menos un elemento

# File lib/dieta/lista.rb, line 15
def empty
        if @head == nil
                true
        else
                false
        end
end
extract_first() click to toggle source

Elimina el primer elemento de la lista y lo devuelve

# File lib/dieta/lista.rb, line 23
def extract_first
        if empty()
                nil
        else
                nodeAux = @head
                @head = @head.next
                nodeAux.value
        end
end
extract_last() click to toggle source

Elimina el último elemento de la lista y lo devuelve

# File lib/dieta/lista.rb, line 33
def extract_last
        if empty()
                nil
        else
                nodeAux = @tail
                @tail = @tail.prev
                nodeAux.value
        end
end
insert_first(value) click to toggle source

Inserta un nuevo nodo, que se crea a partir del valor pasado por parámetro, por el principio

# File lib/dieta/lista.rb, line 43
def insert_first(value)
        newNode = Node.new(value, nil, nil)
        if empty()
                @head = newNode
                @tail = newNode
        else
                aux = @head
                @head = newNode
                @head.next = aux
                if aux == @tail
                        @tail.prev = @head
                else
                        aux.prev = @head
                end
        end
end
insert_last(value) click to toggle source

Inserta un nuevo nodo, que se crea a partir del valor pasado por parámetro, por el final

# File lib/dieta/lista.rb, line 60
def insert_last(value)
        newNode = Node.new(value, nil, nil)
        if empty()
                @head = newNode
                @tail = newNode
        else
                aux = @tail
                @tail = newNode
                @tail.prev = aux
                if @head == aux
                        @head.next = @tail
                else
                        aux.next = @tail
                end
        end
end
insert_multi_first(values) click to toggle source

Usando la función insert_first permite pasar un vector de valores e insertarlos

# File lib/dieta/lista.rb, line 77
def insert_multi_first(values)
        for i in 0..values.length-1
                insert_first(values[i])
        end
end
insert_multi_last(values) click to toggle source

Usando la función insert_last permite pasar un vector de valores e insertarlos

# File lib/dieta/lista.rb, line 83
def insert_multi_last(values)
        for i in 0..values.length-1
                insert_last(values[i])
        end
end