class Lista

Representación de una lista doblemente enlazada de nodos

@author Eugenio Jose Gonzalez Luis @since 1.0.0 @attr_reader Node head Nodo en la cabeza de la lista @attr_reader Node tail Nodo en la última posición de la lista

Constants

VERSION

Version de la clase Lista

Attributes

head[R]
tail[R]

Public Instance Methods

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

Método para la enumeración de los nodos de la lista

@return [Node] devuelve los nodos que conforman la lista

# File lib/lista.rb, line 46
def each
    x = @head
    while(x != nil)
        yield x.value
        x = x.next
    end
end
ordenar() click to toggle source

Ordena los alimentos en base a sus calorias

@return [vector] devuelve un vector ordenado por calorias

# File lib/lista.rb, line 120
def ordenar
    rvector = []
    j = 0
    each do
        |i| rvector[j] = i
        j +=1
    end
    begin
    intercambio = false
    (rvector.count-1).times do |i|
            if rvector[i].sal > rvector[i+1].sal  # Si se cumple la condición, entonces intercambiamos.
                    rvector.swap(i,i+1)
                    intercambio = true
            end # if
            next
    end # times
    end while intercambio == true 
    rlist = Lista.new()
    rlist.push(rvector)
    rlist
end
ordenar_por() { |rvector| ... } click to toggle source

Ordena los alimentos en base a un bloque

@return [vector] devuelve un vector ordenado por el bloque dado

# File lib/lista.rb, line 145
def ordenar_por
    rvector = []
    j = 0
    each do
        |i| rvector[j] = i
        j +=1
    end
    begin
    intercambio = false
    (rvector.count-1).times do |i|
            x = yield rvector[i]
            y = yield rvector[i+1]
            if x > y  # Si se cumple la condición, entonces intercambiamos.
                    rvector.swap(i,i+1)
                    intercambio = true
            end # if
            next
    end # times
    end while intercambio == true 
    rlist = Lista.new()
    rlist.push(rvector)
    rlist
end
pop_head() click to toggle source

Extracción del primer nodo de la lista

@return [any, nil] devuelve el valor guardado en el primer nodo o nil si no hay nodos en la lista

# File lib/lista.rb, line 82
def pop_head()
    if(@head == nil)
        return nil
    end
    
    x = @head
    @head = @head.next
    if(@head == nil)
        @tail = nil
    else
        @head.prev = nil
        x.next = nil
    end
    x.value
end
pop_tail() click to toggle source

Extracción del último nodo de la lista

@return [any, nil] devuelve el valor guardado en el último nodo o nil si no hay nodos en la lista

# File lib/lista.rb, line 101
def pop_tail()
    if(@tail == nil)
        return nil
    end
    
    x = @tail
    @tail = @tail.prev
    if(@tail == nil)
        @head = nil
    else
        @tail.next = nil
        x.prev = nil
    end
    x.value
end
push(x) click to toggle source

Inserción por la cola de la lista de varios nodos @param [Array<any>] x valores de los nuevos nodos

@return [Node] Devuelve el tail

# File lib/lista.rb, line 74
def push(x)
    x.each{
        |i| push_tail(i)
    }
end
push_head(x) click to toggle source

Inserción por la cabeza de la lista @param [any] x valor del nuevo nodo

@return [Node] Devuelve el head

# File lib/lista.rb, line 31
def push_head(x)
    if(@head == nil)
        @head = Node.new(x, nil, nil)
        @tail = @head
    else
        nuevo = Node.new(x, nil, nil)
        nuevo.next= @head
        @head.prev = nuevo
        @head = nuevo
    end
end
push_tail(x) click to toggle source

Inserción por la cola de la lista @param [any] x valor del nuevo nodo

@return [Node] Devuelve el tail

# File lib/lista.rb, line 58
def push_tail(x)
    if(@tail == nil)
        @tail = Node.new(x, nil, nil)
        @head = @tail
    else
        nuevo = Node.new(x, nil, nil)
        nuevo.prev = @tail
        @tail.next = nuevo
        @tail = nuevo
    end
end
to_s() click to toggle source

Convierte el objeto a una cadena de caracteres

@return [String] devuelve la lista como un string

# File lib/lista.rb, line 172
def to_s
    s = ""
    each {|i| s += "#{i.to_s}\n"}
    s
end