Sha256: 97441a9f8b81e0eac8e1b1d0a43233b56d7732cd361242162d4b267143739f0c
Contents?: true
Size: 1.81 KB
Versions: 1
Compression:
Stored size: 1.81 KB
Contents
# encoding: utf-8 # Este fichero contiene la descripción de una # lista doblemente enlazada y sus nodos. # # @author Sara Revilla module Alimento # Este struct describe los nodos de la lista. Node = Struct.new(:value, :next, :prev) # Esta clase representa la lista, tiene cabeza y cola. class List include Enumerable attr_reader :head, :tail # Inicializa las variables de instancia def initialize @head @tail end # Devuelve un string con la lista formateada correctamente def to_s s = "(" node = @head while !node.nil? s += "#{node.value}" if !node.next.nil? s += "," end node = node.next end s += ")" s end # Toma un valor determinado, crea un nodo para él, y lo # inserta por la cola de la lista. def insert(value) node = Node.new(value, nil, nil) # Si la lista está vacía if @head.nil? and @tail.nil? @head = @tail = node else @tail.next = node node.prev = @tail @tail = node end end # Elimina el nodo que se encuentra en la cabeza y devuelve el valor def pop_head if !(@head.nil?) node = @head @head = node.next node.next.prev = nil node.next = nil node.value end end # Elimina el nodo que se encuentra en la cola y devuelve el valor def pop_tail if !(@tail.nil?) node = @tail @tail = node.prev node.prev.next = nil node.prev = nil node.value end end # Necesario para el mixin Enumerable # Iteración sobre los elementos de la lista, de cabeza a cola def each node = @head while !node.nil? yield node.value node = node.next end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
alimento-alu0100947441-0.1.1 | lib/alimento/list.rb |