class Lista

Attributes

contador[RW]
head[RW]
tail[RW]

Public Class Methods

new() click to toggle source
# File lib/prct11/lista.rb, line 8
def initialize
    @head = Nodo.new(nil,nil,nil) #inicio de la lista
    @tail = Nodo.new(nil,nil,nil) #fin de la lista
    @contador=0  #variable que determina el tamaño actual de la lista
end

Public Instance Methods

each() { |value| ... } click to toggle source
# File lib/prct11/lista.rb, line 98
def each
       actual = @tail
    
    while actual != nil
        yield actual.value
        actual = actual.siguiente
    end
end
empty() click to toggle source
# File lib/prct11/lista.rb, line 107
def empty
    return contador==0
end
extract_head() click to toggle source
# File lib/prct11/lista.rb, line 45
def extract_head
    aux = @head
    @head = @head[:previo]
    
    if @head != nil             #Si head no es nil ponemos el siguiente de head como nil para desenlazar la lista
        @head[:siguiente] = nil
    else                        #Si el elemento que se extrae es el unico de la lista entonces ponemos todo a nil como en initialize
        @tail = nil
    end
    
    @contador = @contador - 1
    return aux.value
end
extract_tail() click to toggle source
# File lib/prct11/lista.rb, line 60
def extract_tail
    if @contador == 1
        return extract_head
    else    
        actual = @tail
        @tail = @tail[:siguiente]
                
        if @tail != nil
            @tail[:previo] = nil
        end   
        @contador = @contador - 1
        return actual.value
    end
end
insert_head(nodo) click to toggle source
# File lib/prct11/lista.rb, line 15
def insert_head(nodo)
    
    if empty == true            #Si la lista esta vacia insertamos el elemento en la lista vacia
        nodo[:previo] = @tail
        nodo[:siguiente] = @head
        @head = nodo
        @tail = nodo
    else                        #Si no esta vacia insertamos por el head
        nodo[:previo] = @head
        nodo[:siguiente] = nil
        @head[:siguiente] = nodo
        @head = nodo
    end
    @contador = @contador + 1   #Aumentamos variable que indica tamaño de la lista
    
end
insert_tail(nodo) click to toggle source
# File lib/prct11/lista.rb, line 32
def insert_tail(nodo)
    if empty                    #Si esta vacia insertamos en lista vacia
        insert_head(nodo)
    else                        #Si no insertamos por el tail
        nodo[:siguiente] = @tail
        nodo[:previo] = nil
        @tail[:previo] = nodo
        @tail = nodo
        @contador = @contador + 1
    end
end
insert_varios(nodos) click to toggle source
# File lib/prct11/lista.rb, line 76
def insert_varios (nodos)
    for i in 0..(nodos.length - 1)
      insert_head(nodos[i])
    end
end
to_s() click to toggle source
# File lib/prct11/lista.rb, line 83
def to_s
    aux = @tail
    if empty != true
        string= "\n****** MENU DIETETICO ******"
        while aux.siguiente != nil
            string+= "\n\n#{aux.value}"
            aux = aux.siguiente
        end
        string += "\n\n#{aux.value}"
        return string
    else
        return "Lista vacia"
    end
end