class List

Clase List que define la lista doblemente enlazada e incluye el mixin Enumerable

Attributes

head[R]
tail[R]

Public Class Methods

new(head,tail) click to toggle source

Se asigna la cabeza y la cola de la lista doblemente enlazada

# File lib/alimento/list.rb, line 21
def initialize(head,tail)
    @head = head
    @tail = tail
end

Public Instance Methods

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

Se incluye el metodo mixin Enumerable Se define como un bucle completo sobre la lista

# File lib/alimento/list.rb, line 57
def each 
    node=@head
    while node != nil do
        yield node.value
        node = node.next
    end
end
insert(vector) click to toggle source

Inserta en la lista uno o varios elementos los cuales recibe en forma de vector

# File lib/alimento/list.rb, line 26
def insert vector
    vector.each do |element|
        node = Node.new(element,nil,nil)
        if(@head==nil)
            @head = node
            @tail = node
        else
            node.prev=@tail
            @tail.next = node
            @tail=node
        end
    end
end
ordenar_each() click to toggle source

Se ordena una lista utilizando el método each

# File lib/alimento/list.rb, line 84
def ordenar_each
    vector = self.map { |x| x }
    indice=0
    vector.each do |x|
        aux = x
        c=indice
        indice2=indice+1
        
        vector[indice2..vector.length-1].each do |y|
            if aux > y 
                aux = y
                c = indice2
            end
            indice2+=1
        end
        
        vector[c] = x
        vector[indice] = aux
        
        indice+=1
    end
    vector
end
ordenar_seleccion() click to toggle source

Se ordena una lista utlizando bucles for

# File lib/alimento/list.rb, line 65
def ordenar_seleccion 
    vector = self.map { |x| x }
    for i in 0..self.count-1
        aux = vector[i]
        c = i

        for j in i + 1..self.count-1
            if aux > vector[j] 
                aux = vector[j]
                c = j 
            end
        end
        
        vector[c] = vector[i]
        vector[i] = aux
    end
    vector
end
shift_first() click to toggle source

Elimina el primer elemento de la lista

# File lib/alimento/list.rb, line 40
def shift_first 
    @head=@head.next
    @head.prev=nil
end
shift_last() click to toggle source

Elimina el último elemento de la lista

# File lib/alimento/list.rb, line 45
def shift_last
    @tail=@tail.prev
    @tail.next=nil
end
to_s() click to toggle source

Formatea la salida a texto

# File lib/alimento/list.rb, line 50
def to_s
    string=""
    each { |value| string+=value.to_s + "\n"  }   # Funciona también entre do-end
    return string
end