class List

Esta clase implementa una lista doblemente enlazada Se ha incluido el mixin Enumerable

Attributes

head[R]

Getters de las distintas variables de instancia

num_elem[R]

Getters de las distintas variables de instancia

tale[R]

Getters de las distintas variables de instancia

Public Class Methods

new(node) click to toggle source

Con el primer valor que nos pasen creamos el nodo inicial que es head y tale de las lista. La lista ya tiene un elemento por tanto el numero de elementos es 1

# File lib/Alimento/List.rb, line 20
def initialize (node)
  @head = Node.new(node,nil,nil)
  @tale = @head
  @num_elem = 1
end

Public Instance Methods

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

Se incluye el metodo del mixin Enumerable Se define como una iteración cada uno de los valores de los nodos

# File lib/Alimento/List.rb, line 95
def each
  aux = Node.new
  aux = @head
  tam = @num_elem
  for i in (1..tam)
    yield aux.value
    aux = aux.next
  end
end
each_sort() click to toggle source
# File lib/Alimento/List.rb, line 125
def each_sort
  sort_list = [@head.value]
  self.each_with_index do 
    |x, pos|
    if(pos != 0)
    sort_list.each_with_index do
      |y, index|
      if (index == (sort_list.size - 1))
        if(x < y)
          sort_list.insert(index, x)
          break
        else
          sort_list.push(x)
          break
        end
      else
        if(x < y)
          sort_list.insert(index, x)
          break
        end
      end
    end
    end
  end
  return sort_list
end
extract_head() click to toggle source

Método para extraer el primer elemento (el head)

# File lib/Alimento/List.rb, line 83
def extract_head
  extracted_node = Node.new
  extracted_node = @head
  @head = @head.next
  @head.prev = nil
  extracted_node.next = nil
  @num_elem -= 1
  return extracted_node
end
extract_tale() click to toggle source

Método para extraer el último elemento (el tale)

# File lib/Alimento/List.rb, line 72
def extract_tale
  extracted_node = Node.new
  extracted_node = @tale
  @tale = @tale.prev
  @tale.next = nil
  extracted_node.prev = nil
  @num_elem -= 1
  return extracted_node
end
for_sort() click to toggle source

Se usan los bucles for para ordenar la lista, esta programación NO es funcional

# File lib/Alimento/List.rb, line 106
def for_sort
  sort_list = [@head.value]
  auxnode = @head    
  for i in(1...@num_elem) 
    auxnode = auxnode.next
    for j in(0..sort_list.size)
      if(j == sort_list.size)
        sort_list.push(auxnode.value) 
      else
        if(auxnode.value < sort_list[j])
          sort_list.insert(j,auxnode.value)
          break
        end
      end
    end
  end
  return sort_list
end
insert_head(node) click to toggle source

Metodo para insertar un valor por el head

# File lib/Alimento/List.rb, line 50
def insert_head(node)
  insertnode = Node.new(node,@head,nil)
  @head.prev = insertnode
  @head = insertnode
  @num_elem += 1
end
insert_mto_head(node_array) click to toggle source

Metodo para insertar más de un valor por la head

# File lib/Alimento/List.rb, line 65
def insert_mto_head(node_array) #insert More Than One in head
  node_array.each do |food|
    insert_head(food)
  end
end
insert_mto_tale(node_array) click to toggle source

Metodo para insertar más de un valor por la cola

# File lib/Alimento/List.rb, line 58
def insert_mto_tale(node_array) #insert More Than One in tale
  node_array.each do |food|
    insert_tale(food)
  end
end
insert_tale(node) click to toggle source

Metodo para insertar un valor por la cola

# File lib/Alimento/List.rb, line 42
def insert_tale(node)
  insertnode = Node.new(node,nil,@tale)
  @tale.next = insertnode
  @tale = insertnode
  @num_elem += 1
end
to_s() click to toggle source

Función to_string, que solo muestra el nombre de los valores (los alimentos)

# File lib/Alimento/List.rb, line 27
def to_s
  aux="{"
  node = Node.new
  node = @head
  while (node != tale) do
    aux += node.value.name
    aux += ", "
    node = node.next
  end
  aux += node.value.name
  aux += "}"
  return aux
end