Class: Lista

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/alimento/Lista.rb,
lib/alimento/version.rb

Overview

Representación de una lista doblemente enlazada de nodos

Author:

  • Eugenio Jose Gonzalez Luis

Since:

  • 1.0.0

Direct Known Subclasses

GrupoAlimenticio

Constant Summary

VERSION =

Version de la clase Lista

Since:

  • 1.0.0

"1.0.0"

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#headObject (readonly)

Since:

  • 1.0.0



18
19
20
# File 'lib/alimento/Lista.rb', line 18

def head
  @head
end

#NodeObject (readonly)

head Nodo en la cabeza de la lista

Returns:

  • (Object)

    the current value of Node



16
17
18
# File 'lib/alimento/Lista.rb', line 16

def Node
  @Node
end

#tailObject (readonly)

Since:

  • 1.0.0



18
19
20
# File 'lib/alimento/Lista.rb', line 18

def tail
  @tail
end

Instance Method Details

#eachNode

Método para la enumeración de los nodos de la lista

Returns:

  • (Node)

    devuelve los nodos que conforman la lista

Since:

  • 1.0.0



103
104
105
106
107
108
109
# File 'lib/alimento/Lista.rb', line 103

def each
    x = @head
    while(x != nil)
        yield x.value
        x = x.next
    end
end

#pop_headany?

Extracción del primer nodo de la lista

Returns:

  • (any, nil)

    devuelve el valor guardado en el primer nodo o nil si no hay nodos en la lista

Since:

  • 1.0.0



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/alimento/Lista.rb', line 65

def pop_head()
    if(@head == nil)
        return nil
    end
    
    x = @head
    @head = @head.next
    if(@head == nil)
        @tail = nil
    else
        @head.prev = nil
        x.next = nil
    end
    x.value
end

#pop_tailany?

Extracción del último nodo de la lista

Returns:

  • (any, nil)

    devuelve el valor guardado en el último nodo o nil si no hay nodos en la lista

Since:

  • 1.0.0



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/alimento/Lista.rb', line 84

def pop_tail()
    if(@tail == nil)
        return nil
    end
    
    x = @tail
    @tail = @tail.prev
    if(@tail == nil)
        @head = nil
    else
        @tail.next = nil
        x.prev = nil
    end
    x.value
end

#push(x) ⇒ Node

Inserción por la cola de la lista de varios nodos

Parameters:

  • x (Array<any>)

    valores de los nuevos nodos

Returns:

  • (Node)

    Devuelve el tail

Since:

  • 1.0.0



56
57
58
59
60
# File 'lib/alimento/Lista.rb', line 56

def push(x)
    x.each{
        |i| push_tail(i)
    }
end

#push_head(x) ⇒ Node

Inserción por la cabeza de la lista

Parameters:

  • x (any)

    valor del nuevo nodo

Returns:

  • (Node)

    Devuelve el head

Since:

  • 1.0.0



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/alimento/Lista.rb', line 24

def push_head(x)
    if(@head == nil)
        @head = Node.new(x, nil, nil)
        @tail = @head
    else
        nuevo = Node.new(x, nil, nil)
        nuevo.next= @head
        @head.prev = nuevo
        @head = nuevo
    end
end

#push_tail(x) ⇒ Node

Inserción por la cola de la lista

Parameters:

  • x (any)

    valor del nuevo nodo

Returns:

  • (Node)

    Devuelve el tail

Since:

  • 1.0.0



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/alimento/Lista.rb', line 40

def push_tail(x)
    if(@tail == nil)
        @tail = Node.new(x, nil, nil)
        @head = @tail
    else
        nuevo = Node.new(x, nil, nil)
        nuevo.prev = @tail
        @tail.next = nuevo
        @tail = nuevo
    end
end