class Linkedlist_Double::Lista_Double

Clase Lista doblemente enlazada

Attributes

ultimo[RW]

Public Class Methods

new() click to toggle source
# File lib/linkedlist/linkedlist_double.rb, line 11
def initialize
  @longitud = 0
  @primero = Node_Double::Nodo_Double.new('HEAD')
  @ultimo = Node_Double::Nodo_Double.new('TAIL')
  @primero.sig = @ultimo
  @ultimo.ant = @primero
end

Public Instance Methods

[](indice) click to toggle source
# File lib/linkedlist/linkedlist_double.rb, line 89
def [](indice)
  fail 'Indice erroneo' unless indice.between?(0, longitud)
  if indice < longitud / 2
    # Llegamos antes mirando desde la cabeza
    nodo_actual = @primero.sig
    while !nodo_actual.nil? && indice != 0
      nodo_actual = nodo_actual.sig
      indice -= 1
    end
    return nodo_actual.val
  else
    # Llegamos antes mirando desde la cola
    nodo_actual = @ultimo.ant
    indice = longitud - indice - 1
    while !nodo_actual.nil? && indice != 0
      nodo_actual = nodo_actual.ant
      indice -= 1
    end
    return nodo_actual.val
  end
end
each() { |val| ... } click to toggle source

Enumerable

# File lib/linkedlist/linkedlist_double.rb, line 112
def each
  return nil if @primero.sig.nil?
  entrada = @primero.sig
  until entrada.sig.nil?
    yield entrada.val
    entrada = entrada.sig
  end
end
head() click to toggle source
# File lib/linkedlist/linkedlist_double.rb, line 24
def head
  nodo_head = @ultimo.ant
  nodo_head.val
end
pop() click to toggle source

Elimina el último elemento de la lista y devuelve el valor (value) de dicho elemento

# File lib/linkedlist/linkedlist_double.rb, line 46
def pop
  fail 'Lista vacia' if @longitud < 1
  nodo_actual = @ultimo
  devolver = @ultimo.ant.val

  @ultimo.ant = nodo_actual.ant
  nodo_actual.ant.sig = @ultimo

  @longitud -= 1
  devolver
end
push(value) click to toggle source

Añade un valor al final de la lista Devuelve 'self' es decir, el objeto tipo Lista que llama a 'push'

# File lib/linkedlist/linkedlist_double.rb, line 31
def push(value)
  node = Node_Double::Nodo_Double.new(value)
  nodo_final = @ultimo

  nodo_final.ant.sig = node
  node.ant = nodo_final.ant
  node.sig = nodo_final
  nodo_final.ant = node

  @longitud += 1
  self
end
push_array(*items) click to toggle source

Añade un conjunto de valores a la lista, pasado por array y devuelve al objeto llamante, de la clase Lista

# File lib/linkedlist/linkedlist_double.rb, line 82
def push_array(*items)
  @longitud += items.length
  @primero = Node_Double::Nodo_Double.new(items.shift)
  items.each { |item| push(item) }
end
shift() click to toggle source

Elimina el primer elemento de la lista y devuelve su valor

# File lib/linkedlist/linkedlist_double.rb, line 60
def shift
  fail 'Lista vacia' if @longitud < 1
  devolver = @primero.sig.val
  @primero.sig.sig.ant = @primero
  @primero.sig = @primero.sig.sig
  @longitud -= 1
  devolver
end
tail() click to toggle source
# File lib/linkedlist/linkedlist_double.rb, line 19
def tail
  nodo_tail = @primero.sig
  nodo_tail.val
end
unshift(value) click to toggle source

Añade un nodo al principio de la lista y devuelve al objeto llamante, de la clase Lista

# File lib/linkedlist/linkedlist_double.rb, line 71
def unshift(value)
  node = Node_Double::Nodo_Double.new(value, @primero.sig)
  @primero.sig.ant = node
  @primero.sig = node
  node.ant = @primero
  @longitud += 1
  self
end