Class: Doublylinkedlist::Doublylinkedlist

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

Overview

En esta clase creamos nuestra propia lista doblemente enlazada

Author:

Instance Method Summary (collapse)

Constructor Details

- (Doublylinkedlist) initialize

Iniciar los punteros de la lista, inicio y final



8
9
10
11
# File 'lib/doublylinkedlist/doublylinkedlist.rb', line 8

def initialize()
	@inicio = nil
	@final = nil
end

Instance Method Details

- (Object) each(&block)

Método para que la lista sea enumerable



135
136
137
138
139
140
141
# File 'lib/doublylinkedlist/doublylinkedlist.rb', line 135

def each (&block)
	copia = @inicio
	while !copia.nil?
		block.call(copia[:valor])
		copia = copia[:sig]
	end
end

- (Object) extraer_final

Metodo que nos permite extraer algo al final de la lista



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/doublylinkedlist/doublylinkedlist.rb', line 77

def extraer_final()
	
	if !@inicio.nil?

		if @inicio[:sig].nil? && @final[:sig].nil?
			@inicio = nil
			@final = nil
		
		else
			@final = @final[:ant]
			@final[:sig] = nil
		end

	else
		raise RuntimeError, "La lista esta vacia"
	end
end

- (Object) extraer_inicio

Metodo que nos permite extraer algo al inicio de la lista



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

def extraer_inicio()
	
	if !@inicio.nil?

		if @inicio[:sig].nil? && @final[:sig].nil?
			@inicio = nil
			@final = nil
		
		else
			@inicio = @inicio[:sig]
			@inicio[:ant] = nil
		end

	else
		raise RuntimeError, "La lista esta vacia"
	end
end

- (Object) insertar_final(val)

Metodo que nos permite insertar algo al final de la lista

Parameters:

  • val (val)

    recibe el valor a insertar en la lista



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/doublylinkedlist/doublylinkedlist.rb', line 45

def insertar_final(val)
	if @final.nil?
		@inicio = Struct::Nodo.new(nil, val, nil)
		@final = @inicio
	else
	    copia = @final
		@final[:sig] = Struct::Nodo.new(copia, val, nil)
		copia2 = @final[:sig]
		@final = copia2
	end
end

- (Object) insertar_inicio(val)

Metodo que nos permite insertar algo al inicio de la lista

Parameters:

  • val (val)

    recibe el valor a insertar en la lista



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

def insertar_inicio(val)
	if @inicio.nil?
		@inicio = Struct::Nodo.new(nil, val, nil)
		@final = @inicio
	else
		copia = @inicio
		@inicio = Struct::Nodo.new(nil, val, copia)
		copia[:ant] = @inicio
	end
end

- (Object) ordenar!

Metodo que nos ordenada la lista segun los criterios de la APA



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/doublylinkedlist/doublylinkedlist.rb', line 144

def ordenar! 
	cambio = true
	while cambio
		cambio = false
		i = @inicio
		i_1 = @inicio[:sig]
		while i_1 != nil
			if(i[:valor] > i_1[:valor])
				i[:valor], i_1[:valor] = i_1[:valor], i[:valor]
				cambio = true
			end
			i = i_1
			i_1 = i_1[:sig]
		end
	end
end

- (Object) posicion(pos)

Metodo que devuelve lo contenido en una posicion de la lista

Parameters:

  • pos (pos)

    del elemento deseado

Returns:

  • nodo de la posicion de la lista



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/doublylinkedlist/doublylinkedlist.rb', line 114

def posicion (pos)
 	if @inicio.nil?
 		raise RuntimeError, "La lista esta vacia"
 	end

 	if pos<0 || pos>tamano-1
 		raise RuntimeError, "La posicion no es correcta"
 	end

		contador=0
		copia=@inicio
		while contador<pos && !copia.nil?
			copia2 = copia[:sig]
 			copia = copia2
 			contador += 1
 		end
 	
	return copia[:valor]
end

- (Object) tamano

Metodo que nos devuelve la cantidad de elementos en la lista

Returns:

  • cantidad de elementos en la lista



97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/doublylinkedlist/doublylinkedlist.rb', line 97

def tamano()
	if !@inicio.nil?

		contador = 1
		copia = @inicio

		while !copia[:sig].nil?
			contador += 1
			copia2 = copia[:sig]
			copia = copia2
		end
	end
	return contador
end

- (Object) to_s

Metodo para imprimir la lista con formato

Returns:

  • la lista formateada en un string



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/doublylinkedlist/doublylinkedlist.rb', line 14

def to_s
	actual = @inicio
	cadena = "|"
		while !actual.nil?
			cadena << actual[:valor].to_s

			if !actual[:sig].nil?
				cadena << ", "
			end

			actual = actual[:sig]
		end
	cadena << "|"
	return cadena
end