Class: List

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/dieta/lista.rb

Overview

Define una clase de lista doblemente enlazada

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeList

Constructor de la clase, crea una lista vacía



8
9
10
11
12
13
# File 'lib/dieta/lista.rb', line 8

def initialize
	# Atributo que es igual al primer elemento de la lista 
	@head = nil
	# Atributo que es igual al último elemento de la lista
	@tail = nil
end

Instance Attribute Details

#headObject

Returns the value of attribute head



6
7
8
# File 'lib/dieta/lista.rb', line 6

def head
  @head
end

#tailObject

Returns the value of attribute tail



6
7
8
# File 'lib/dieta/lista.rb', line 6

def tail
  @tail
end

Instance Method Details

#eachObject

Recorre los elementos del vector para poder usar los funciones Enumerable



89
90
91
92
93
94
95
# File 'lib/dieta/lista.rb', line 89

def each
	aux = @head
	while aux != nil
		yield aux.value
		aux = aux.next
	end
end

#emptyObject

Devuleve true si la lista está vacía y false si contiene al menos un elemento



15
16
17
18
19
20
21
# File 'lib/dieta/lista.rb', line 15

def empty
	if @head == nil
		true
	else
		false
	end
end

#extract_firstObject

Elimina el primer elemento de la lista y lo devuelve



23
24
25
26
27
28
29
30
31
# File 'lib/dieta/lista.rb', line 23

def extract_first
	if empty()
		nil
	else
		nodeAux = @head
		@head = @head.next
		nodeAux.value
	end
end

#extract_lastObject

Elimina el último elemento de la lista y lo devuelve



33
34
35
36
37
38
39
40
41
# File 'lib/dieta/lista.rb', line 33

def extract_last
        if empty()
                nil
        else
                nodeAux = @tail
                @tail = @tail.prev
                nodeAux.value
        end
end

#insert_first(value) ⇒ Object

Inserta un nuevo nodo, que se crea a partir del valor pasado por parámetro, por el principio



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/dieta/lista.rb', line 43

def insert_first(value)
	newNode = Node.new(value, nil, nil)
	if empty()
		@head = newNode
		@tail = newNode
	else
		aux = @head
		@head = newNode
                       @head.next = aux
		if aux == @tail
			@tail.prev = @head
		else
			aux.prev = @head
		end
	end
end

#insert_last(value) ⇒ Object

Inserta un nuevo nodo, que se crea a partir del valor pasado por parámetro, por el final



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/dieta/lista.rb', line 60

def insert_last(value)
        newNode = Node.new(value, nil, nil)
        if empty()
                @head = newNode
			@tail = newNode
        else
			aux = @tail
                @tail = newNode
                @tail.prev = aux
                if @head == aux
                        @head.next = @tail
                else
                        aux.next = @tail
                end
        end
end

#insert_multi_first(values) ⇒ Object

Usando la función insert_first permite pasar un vector de valores e insertarlos



77
78
79
80
81
# File 'lib/dieta/lista.rb', line 77

def insert_multi_first(values)
	for i in 0..values.length-1
		insert_first(values[i])
	end
end

#insert_multi_last(values) ⇒ Object

Usando la función insert_last permite pasar un vector de valores e insertarlos



83
84
85
86
87
# File 'lib/dieta/lista.rb', line 83

def insert_multi_last(values)
        for i in 0..values.length-1
                insert_last(values[i])
        end
end