class DLL

Attributes

head[R]
lenght[R]
tail[R]

Public Class Methods

new(*values) click to toggle source
# File lib/dietaryMenu/dll.rb, line 13
def initialize(*values)
    @length = 0
    @head = nil
    @tail = nil
    unless values.empty?
        push(*values)
    end
end

Public Instance Methods

[](i) click to toggle source
# File lib/dietaryMenu/dll.rb, line 41
def [](i)
    node = @tail
    i.times do
        node = @tail.next
    end
    node.value
end
each(reverse=false) { |pointer| ... } click to toggle source
# File lib/dietaryMenu/dll.rb, line 69
def each(reverse=false, &block)
    if(reverse)
        pointer = @head
        prox = :prev

    else
        pointer = @tail
        prox = :next
    end

    while (pointer!=nil)
        yield pointer
        pointer = pointer[prox]
    end
end
push(*values) click to toggle source
# File lib/dietaryMenu/dll.rb, line 22
def push(*values)
    if values.empty?
        raise "No hay valores a insertar"
    end
    value = values[0]

    if @head.nil?
        @head = @tail = Node.new(value, nil, nil)
        @length+=1
    else
        insert(value)
    end


    (1...values.length).each do |i|
        insert(values[i])
    end

end
reverse() click to toggle source
# File lib/dietaryMenu/dll.rb, line 54
def reverse
    self.to_s(true)
end
shift() click to toggle source
# File lib/dietaryMenu/dll.rb, line 57
def shift
    value = nil
    if(@head!= nil)
        pointer = @head
        value = pointer.value
        @head = pointer.prev
        @head.next = nil
        pointer.prev = nil
    end
    return value
end
to_s( reverse = false ) click to toggle source
# File lib/dietaryMenu/dll.rb, line 48
def to_s( reverse = false )
    self.each(reverse) do |pointer|
        puts pointer
    end
    "length: #{@length}"
end

Private Instance Methods

insert(value) click to toggle source
# File lib/dietaryMenu/dll.rb, line 86
def insert(value)
    node = Node.new(value, @head, nil)
    @head.next = node
    @head = node
    @length +=1
end