class List
require “./node.rb”
create a Struct with :value and :next
Attributes
end[R]
front[R]
size[R]
Public Class Methods
new(value = nil)
click to toggle source
# File lib/biblio/list.rb, line 9 def initialize(value = nil) @size = 0 @front = Node.new(nil, nil, nil) @end = @front if value != nil push_front(value) end end
Public Instance Methods
clear()
click to toggle source
# File lib/biblio/list.rb, line 126 def clear @size = 0 @front = Node.new(nil, nil, nil) @end = @front end
each() { |value| ... }
click to toggle source
# File lib/biblio/list.rb, line 117 def each return nil unless @size > 0 aux = @front until aux.nil? yield aux.value aux = aux.next end end
get_pos(position)
click to toggle source
# File lib/biblio/list.rb, line 101 def get_pos(position) if position < @size aux = @front if position > 0 i = 0 while i < position aux = aux.next i = i+1 end end else aux = nil end aux end
insert(position, value)
click to toggle source
# File lib/biblio/list.rb, line 73 def insert(position, value) if position >= 0 && position <= @size if position == 0 && @size == 0 # La lista esta vacia push_front(value) elsif position == @size push_back(value) elsif position == 0 push_front(value) else # Buscamos el nodo anterior a la posicion i = 0 aux = @front while i < position-1 aux = aux.next i = i+1 end #realizamos swap swap = aux.next aux.next = Node.new(value, aux, swap) aux = aux.next @size = @size + 1 end end nil end
pop_back()
click to toggle source
# File lib/biblio/list.rb, line 43 def pop_back aux = nil if size == 1 aux = @end.value @end = Node.new(nil, nil, nil) @front = @end @size = @size - 1 elsif size > 1 aux = @end.value @end = @end.previous @size = @size - 1 end aux end
pop_front()
click to toggle source
# File lib/biblio/list.rb, line 58 def pop_front aux = nil if size == 1 aux = @front.value @front = Node.new(nil, nil, nil) @end = @front @size = @size - 1 elsif size > 1 aux = @front.value @front = @front.next @size = @size - 1 end aux end
push_back(value)
click to toggle source
# File lib/biblio/list.rb, line 19 def push_back(value) if size == 0 @end = Node.new(value, nil, nil) @front = @end else @end.next = Node.new(value, @end, nil) @end = @end.next end @size = @size + 1 nil end
push_front(value)
click to toggle source
# File lib/biblio/list.rb, line 31 def push_front(value) if size == 0 @front = Node.new(value, nil, nil) @end = @front else @front.previous = Node.new(value, nil, @front) @front= @front.previous end @size = @size + 1 nil end