class P5_T_34::LList
Descripción: Clase lista enlazada.
almacena un nodo top como cabeza de la misma y el número de elementos que contiene.
Attributes
size[R]
tail[R]
top[R]
Public Class Methods
new(topI=nil)
click to toggle source
# File lib/P5_T_34/LList.rb, line 20 def initialize (topI=nil) #raise ArgumentError, "No puede ser nil" unless (topI != nil) if (topI != nil) init(topI) else @top = nil # cabeza de la lista enlazada, de tipo interno Node @tail = @top # cola de la lista enlazada, último nodo @size = 0 # Número de nodos de la lista end end
to_node(value)
click to toggle source
Descripción: Método de clase encargado de convertir
cualquier tipo de dato de entrada a un objeto de tipo Node. En caso de que el objeto de entrada ya sea de tipo Node se retorna el mismo objeto.
# File lib/P5_T_34/LList.rb, line 43 def self.to_node (value) if (value.is_a? Node) then return value end return Node.new(value, nil, nil) end
Public Instance Methods
[](key)
click to toggle source
Descripión: sobrecarga del operador de acceso []
para la clase
# File lib/P5_T_34/LList.rb, line 82 def [] (key) end
each() { |value| ... }
click to toggle source
Método each.
# File lib/P5_T_34/LList.rb, line 86 def each aux = top while aux != nil do yield aux.value aux = aux.next end end
init(topI)
click to toggle source
Función auxiliar para la inicialización de la lista enlazada
# File lib/P5_T_34/LList.rb, line 32 def init(topI) raise RuntimeError, "Lista ya iniciada." unless (@top == nil) @top = LList::to_node(topI) @tail = @top @size = 1 end
pop()
click to toggle source
Descripción: Método que retorna el primer elemento y lo elimina de la lista
# File lib/P5_T_34/LList.rb, line 67 def pop aux = @top if (aux != nil) @top = @top.next @size -= 1 if (@top != nil) then @top.prev = nil end end return aux end
push(newNode, *args)
click to toggle source
Descripción: Método push que permite insertar uno o
varios elementos en la lista
# File lib/P5_T_34/LList.rb, line 51 def push (newNode, *args) #raise ArgumentError, "Los elementos deben ser de tipo Node" unless newNode.is_a? Node #@top.class if (@top == nil) init(newNode) else @tail.next = LList::to_node(newNode) @tail.next.prev = @tail @tail = @tail.next @size += 1 end args.each { |x| push(x) } @size end