Class: List

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/p6/list.rb

Overview

Una lista de nodos doblemente enlazada

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeList

Constructor de la clase Lista



10
11
12
13
14
# File 'lib/p6/list.rb', line 10

def initialize()
	@size = 0
	@head = nil
	@tail = nil
end

Instance Attribute Details

#headObject

Returns the value of attribute head.



7
8
9
# File 'lib/p6/list.rb', line 7

def head
  @head
end

#sizeObject

Returns the value of attribute size.



7
8
9
# File 'lib/p6/list.rb', line 7

def size
  @size
end

#tailObject

Returns the value of attribute tail.



7
8
9
# File 'lib/p6/list.rb', line 7

def tail
  @tail
end

Instance Method Details

#[](i) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/p6/list.rb', line 108

def [](i)
	if i.is_a?Integer
		if i == 0
			return @head.value
		elsif i == (@size - 1)
			return @tail.value
		elsif i < @size - 1 && i > 0
			puntero = @head
			i.times{puntero = puntero.next}
			return puntero.value
		else 
			return nil
		end
	end
end

#eachObject

Método each



100
101
102
103
104
105
106
# File 'lib/p6/list.rb', line 100

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

#emptyObject

Devuelve vacío si la lista está vacía



91
92
93
94
95
96
97
# File 'lib/p6/list.rb', line 91

def empty()
	if(@size == 0)
		return true
	else
		return false
	end
end

#insert(item) ⇒ Object

Inserta un elemento por la cabeza



33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/p6/list.rb', line 33

def insert(item)
	item = Node.new(item, nil, nil)
	if(empty)
		@head = item
		item.prev = nil
	else
		@tail.next = item
		item.prev = @tail
	end

	@tail = item
	item.next = nil
	@size += 1
end

#insert_many(array) ⇒ Object

Inserta un vector de elementos



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/p6/list.rb', line 49

def insert_many(array)
	array.each do |item|
		item = Node.new(item,nil,nil)
		if(empty)
			@head = item
			item.prev = nil
		else
			@tail.next = item
			item.prev = @tail
		end

		@tail = item
		item.next = nil
		@size += 1
	end
end

#pop_headObject

Elimina el elemento de la cabeza



67
68
69
70
71
72
73
74
75
76
# File 'lib/p6/list.rb', line 67

def pop_head()
	if(empty)
		puts "Lista vacía"
	else
		aux = @head
		@head.next.prev = nil
		@head = @head.next
		@size -= 1
	end
end

#pop_tailObject

Elimina el elemento de la cola



79
80
81
82
83
84
85
86
87
88
# File 'lib/p6/list.rb', line 79

def pop_tail()
	if(empty)
		puts "Lista vacía"
	else
		aux = @tail
		@tail.prev.next = nil
		@tail = @tail.prev
		@size -= 1
	end
end

#push(item) ⇒ Object

Inserta un alimento por la cola



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/p6/list.rb', line 17

def push(item)
	item = Node.new(item, nil, nil)
	if(empty)
		@tail = item
		item.next = nil
	else 
		head.prev = item
		item.next = @head
	end

	@head = item
	item.prev = nil
	@size += 1
end

#to_sObject



124
125
126
127
128
129
130
131
132
# File 'lib/p6/list.rb', line 124

def to_s
	nodo = @head
	cadena =""
	while (nodo != nil)
		cadena =cadena + nodo.value.to_s
		nodo = nodo.next
	end
	return cadena
end