class Dll

Clase lista doblemente enlazada @author alu0100880625 @attr_reader [Node] head struct que almacena el nodo anterior (:prev), el dato del actual (:value) y el nodo siguiente (:next) al inicio @attr_reader [Node] tail struct que almacena el nodo anterior (:prev), el dato del actual (:value) y el nodo siguiente (:next) al final

Constants

Node

Attributes

head[R]
tail[R]

Public Class Methods

new(&block) click to toggle source

Método que instancia un objeto de la clase (una lista vacia con head y tail inicializados a nil)

# File lib/dieta/dll.rb, line 10
def initialize(&block)
        @head=nil
        @tail=nil
        if(block_given?)
                @nombre_lista=""
                instance_eval(&block)
        end
end

Public Instance Methods

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

Método necesario para el módulo Enumerable

# File lib/dieta/dll.rb, line 69
def each
        aux=@head
        while(aux!=nil)
                yield aux[:data]
                aux=aux[:next]
        end
end
elemento(ele) click to toggle source
# File lib/dieta/dll.rb, line 79
def elemento(ele)
        insert_back(ele)
end
extract_back() click to toggle source

Método que extrae un dato de la lista por el final @return [Data] dato extraido

# File lib/dieta/dll.rb, line 58
def extract_back
        aux=@tail[:data]
        @tail=@tail[:prev]
        if(@ŧail==nil)
                @head=nil
        else
                @tail[:prev]=nil
        end
        aux
end
extract_front() click to toggle source

Método que extrae un dato de la lista por el inicio @return [Data] dato extraido

# File lib/dieta/dll.rb, line 46
def extract_front
        aux=@head[:data]
        @head=@head[:next]
        if(@head==nil)
                @tail=nil
        else
                @head[:prev]=nil
        end
        aux
end
insert_back(data) click to toggle source

Método que crea un nodo que contenga el dato y lo inserta en la lista por el final @param [Data] data dato que se desea insertar

# File lib/dieta/dll.rb, line 33
def insert_back(data)
        if(@tail==nil)
                aux=Node.new(nil,data,nil)
                @tail=aux
                @head=aux
        else
                aux=Node.new(@tail,data,nil)
                @tail[:next]=aux
                @tail=aux
        end
end
insert_front(data) click to toggle source

Método que crea un nodo que contenga el dato y lo inserta en la lista por el inicio @param [Data] data dato que se desea insertar

# File lib/dieta/dll.rb, line 20
def insert_front(data)
        if(@head==nil)
                aux=Node.new(nil,data,nil)
                @head=aux
                @tail=aux
        else
                aux=Node.new(nil,data,@head)
                @head[:prev]=aux
                @head=aux
        end
end
nombre(options) click to toggle source
# File lib/dieta/dll.rb, line 76
def nombre(options)
        @nombre_lista = "#{options[:nombre]}"
end
to_s() click to toggle source
# File lib/dieta/dll.rb, line 82
def to_s
        aux=@head
        str=""

        aux2=self.instance_variables
        baux=false
        aux2.each do |x|
          if(x==:@nombre_lista)
            baux=true
          end
        end
        if(baux==true)
                str+="-#{@nombre_lista}\n"
        while(aux!=nil)
                str+=aux[:data].to_s
                aux=aux[:next]
        end
        str
        end
end