1 00:00:02,160 --> 00:00:25,260 Vale, pues entonces, estábamos diciendo que como LinkedList es tan apañada para inserciones y borrados, pues LinkedList mete métodos propios suyos, que solo tiene ella, relacionados con hacer más tipos de inserciones y más tipos de borrados. 2 00:00:25,260 --> 00:00:36,179 Porque como es su especialidad, la especialidad del LinkedList es insertar y borrar. Esa es su especialidad, es para lo que es buena. Si no, giraríamos con ArrayList para siempre. 3 00:00:36,179 --> 00:00:38,600 entonces como la especialidad de linked list 4 00:00:38,600 --> 00:00:40,899 es insertar y eliminar 5 00:00:40,899 --> 00:00:42,520 porque ya sabemos 6 00:00:42,520 --> 00:00:44,439 que lo hace ahí súper chulo 7 00:00:44,439 --> 00:00:46,799 ¿vale? eliminar 8 00:00:46,799 --> 00:00:49,039 ¡pum! punto pelota 9 00:00:49,039 --> 00:00:51,039 insertar 10 00:00:51,039 --> 00:00:52,479 ¡pum! enlace para allá 11 00:00:52,479 --> 00:00:54,659 y este para acá, punto pelota, ya está, como es tan buena 12 00:00:54,659 --> 00:00:56,840 añade métodos propios relacionados 13 00:00:56,840 --> 00:00:57,259 con eso 14 00:00:57,259 --> 00:01:00,820 y la pregunta sería, ¿y por qué añade 15 00:01:00,820 --> 00:01:02,399 métodos propios? pero si ya tenemos 16 00:01:02,399 --> 00:01:04,599 add y remove con todas sus variantes 17 00:01:04,599 --> 00:01:07,680 at first, at last, remove, remove all 18 00:01:07,680 --> 00:01:09,200 porque añade métodos propios 19 00:01:09,200 --> 00:01:12,000 bueno, pues para ofrecernos 20 00:01:12,000 --> 00:01:13,760 trabajar 21 00:01:13,760 --> 00:01:15,359 con una estructura 22 00:01:15,359 --> 00:01:17,459 muy habitual 23 00:01:17,459 --> 00:01:19,599 en informática de toda la vida que es la pila 24 00:01:19,599 --> 00:01:20,920 la pila, a todo el mundo le suena 25 00:01:20,920 --> 00:01:23,620 la pila es una estructura para almacenar 26 00:01:23,620 --> 00:01:25,599 datos que se basa en 27 00:01:25,599 --> 00:01:27,620 esta idea 28 00:01:27,620 --> 00:01:31,480 ¿vale? tú cuando tienes una caja 29 00:01:31,480 --> 00:01:33,599 pues añadir a la caja 30 00:01:33,599 --> 00:01:35,219 en principio 31 00:01:35,219 --> 00:01:37,140 se queda como difuso, pero dices, vale, añado 32 00:01:37,140 --> 00:01:39,280 pero ¿dónde al principio, al final, en medio 33 00:01:39,280 --> 00:01:40,620 o cómo añado, en un orden? 34 00:01:41,239 --> 00:01:43,239 Sacar de la caja, ya, pero sacar está como 35 00:01:43,239 --> 00:01:45,180 muy abstracto, me falta información. ¿De dónde 36 00:01:45,180 --> 00:01:47,060 saco? ¿Del principio, del final? 37 00:01:47,239 --> 00:01:49,019 ¿Cómo lo hago? Hay veces 38 00:01:49,019 --> 00:01:50,799 que queremos 39 00:01:50,799 --> 00:01:53,159 no necesitar esa información 40 00:01:53,159 --> 00:01:55,260 complementaria, sino meter y sacar 41 00:01:55,260 --> 00:01:56,980 y ya está. Entonces, 42 00:01:57,280 --> 00:01:58,579 esa es la idea de la pila. 43 00:01:59,280 --> 00:02:01,340 La pila es una estructura, una estructura 44 00:02:01,340 --> 00:02:03,159 que se puede programar en cualquier 45 00:02:03,159 --> 00:02:09,719 El lenguaje de programación, lógicamente, es una estructura en la cual cuando se inserta un elemento, 46 00:02:09,719 --> 00:02:18,159 se inserta, si la pila es esto, que es un conjunto de muchas cosas, es una pila, una pila es un conjunto de cosas, una lista. 47 00:02:18,860 --> 00:02:23,840 Pues la opción de insertar siempre va a ser en la cima. 48 00:02:24,879 --> 00:02:29,900 Con lo cual, cuando tú insertas en una pila, no tienes que dar la información de dónde insertas. 49 00:02:29,900 --> 00:02:38,199 Si al principio, al final, entre medias, porque en una pila, por definición, siempre que se añade algo, se añade en la cima. 50 00:02:38,759 --> 00:02:42,199 No tienes que dar esa información, porque es la única opción en una pila, añadir en la cima. 51 00:02:44,319 --> 00:02:52,039 Y cuando tú sacas de una pila, cuando tú sacas no tienes que decir tampoco de dónde saco, de arriba, de abajo, de la mitad, no. 52 00:02:52,039 --> 00:03:11,699 Cuando tú dices sacar de la pila, se asume que por propia definición de este concepto, tú sacas siempre el último que metiste, ¿vale? Esto es lo que se llama una pila, por tanto se dice que tiene un comportamiento así, ¿vale? 53 00:03:11,699 --> 00:03:17,219 El último que entró es el primero que sale. 54 00:03:18,620 --> 00:03:20,039 Es el funcionamiento de la pila. 55 00:03:20,159 --> 00:03:21,860 El último que llegó es el primero que sale. 56 00:03:22,360 --> 00:03:25,500 Se llama pila porque es como funciona cuando tú apilas las cosas. 57 00:03:25,680 --> 00:03:30,539 Cuando tú apilas las cosas, lo último que metes se queda arriba del todo, 58 00:03:30,800 --> 00:03:34,219 con lo cual lo primero que sacas es lo último que metiste. 59 00:03:34,659 --> 00:03:35,960 Es el efecto de apilar. 60 00:03:36,219 --> 00:03:37,719 Por eso se llama pila, lógicamente. 61 00:03:38,500 --> 00:03:39,000 ¿Vale? 62 00:03:39,000 --> 00:03:42,099 entonces es una estructura 63 00:03:42,099 --> 00:03:43,939 que una vez programada 64 00:03:43,939 --> 00:03:45,180 tú te limitas a decir 65 00:03:45,180 --> 00:03:47,139 apila 66 00:03:47,139 --> 00:03:49,659 que esa sería 67 00:03:49,659 --> 00:03:51,560 lo que se llama, para unificar 68 00:03:51,560 --> 00:03:53,460 un poco conceptos, el hacer el push 69 00:03:53,460 --> 00:03:55,419 en la pila, hago un push 70 00:03:55,419 --> 00:03:56,500 ahí se queda arriba 71 00:03:56,500 --> 00:03:59,740 y desapila o saca, que esto es lo que 72 00:03:59,740 --> 00:04:00,199 se llama 73 00:04:00,199 --> 00:04:03,360 pues para unificar términos 74 00:04:03,360 --> 00:04:05,439 y para entendernos todos, lo que se llama hacer un pop 75 00:04:05,439 --> 00:04:07,000 push es 76 00:04:07,000 --> 00:04:08,939 a la cima, elemento nuevo 77 00:04:08,939 --> 00:04:10,699 y pop es, venga, trae 78 00:04:10,699 --> 00:04:12,479 el pop siempre saca este 79 00:04:12,479 --> 00:04:13,400 ¿vale? 80 00:04:15,120 --> 00:04:16,620 entonces es una estructura muy natural 81 00:04:16,620 --> 00:04:18,839 en informática, porque muchas veces 82 00:04:18,839 --> 00:04:20,920 reproduce exactamente lo que 83 00:04:20,920 --> 00:04:22,879 pasa, en gestión 84 00:04:22,879 --> 00:04:24,899 de procesos, en sistemas informáticos 85 00:04:24,899 --> 00:04:26,519 lo habréis visto 86 00:04:26,519 --> 00:04:28,240 ¿no? cuando 87 00:04:28,240 --> 00:04:32,490 bueno, pues la gestión de procesos 88 00:04:32,490 --> 00:04:34,189 de un sistema operativo, ya sabéis 89 00:04:34,189 --> 00:04:36,490 que está continuamente cambiando de proceso 90 00:04:36,490 --> 00:04:37,990 de uno a otro, ahora 91 00:04:37,990 --> 00:04:39,910 este, ahora el otro, ahora abres esto 92 00:04:39,910 --> 00:04:42,149 pues se va aquí, está continuamente cambiando 93 00:04:42,149 --> 00:04:43,029 de un proceso a otro 94 00:04:43,029 --> 00:04:46,610 y todos esos procesos son programas 95 00:04:46,610 --> 00:04:48,410 que están en RAM, todos 96 00:04:48,410 --> 00:04:51,930 todos son programitas que están en RAM 97 00:04:51,930 --> 00:04:54,449 entonces cuando un proceso se está ejecutando 98 00:04:54,449 --> 00:04:55,649 ¿qué ocurre? 99 00:04:56,149 --> 00:04:58,290 que hay un registro que se llama en la CPU 100 00:04:58,290 --> 00:05:00,449 un registro que se llama contador de programa 101 00:05:00,449 --> 00:05:01,569 que es básico 102 00:05:01,569 --> 00:05:04,189 que el contador de programa 103 00:05:04,189 --> 00:05:05,350 es el que te dice 104 00:05:05,350 --> 00:05:08,189 en qué dirección está 105 00:05:08,189 --> 00:05:10,490 la sentencia que toca ejecutar 106 00:05:10,490 --> 00:05:11,970 o que se está ejecutando, vamos 107 00:05:11,970 --> 00:05:13,050 en qué dirección está 108 00:05:13,050 --> 00:05:17,920 entonces, si tú estás 109 00:05:17,920 --> 00:05:19,879 saltando de proceso todo el rato 110 00:05:19,879 --> 00:05:22,060 el contador de programa 111 00:05:22,060 --> 00:05:24,339 está saltando todo el rato 112 00:05:24,339 --> 00:05:26,279 pero claro 113 00:05:26,279 --> 00:05:28,000 no puedes perder, cuando tú saltas 114 00:05:28,000 --> 00:05:29,980 de aquí a aquí, no puedes 115 00:05:29,980 --> 00:05:32,120 perder en qué posición estabas 116 00:05:32,120 --> 00:05:33,980 porque una vez que has acabado 117 00:05:33,980 --> 00:05:35,680 con esta subrutina 118 00:05:35,680 --> 00:05:37,920 o este subproceso, tienes que 119 00:05:37,920 --> 00:05:38,899 volver a la que estabas 120 00:05:38,899 --> 00:05:41,399 ¿vale? que ahora estás aquí 121 00:05:41,399 --> 00:05:43,199 y vuelves a llamar a otra subrutina 122 00:05:43,199 --> 00:05:45,360 vale, el contador de programa salta 123 00:05:45,360 --> 00:05:47,819 pero cuando esta subrutina ha terminado 124 00:05:47,819 --> 00:05:49,720 tienes que volver a la que estabas 125 00:05:49,720 --> 00:05:51,519 entonces no es tan sencillo como que 126 00:05:51,519 --> 00:05:53,180 el contador de programa vaya saltando 127 00:05:53,180 --> 00:05:55,839 según el sistema operativo 128 00:05:55,839 --> 00:05:56,920 va cambiando de 129 00:05:56,920 --> 00:05:59,079 subrutina, ahora abro esta ventana 130 00:05:59,079 --> 00:06:01,259 ahora hago no sé qué, siempre tiene que volver 131 00:06:01,259 --> 00:06:03,480 al punto en el que estaba cuando se 132 00:06:03,480 --> 00:06:04,879 lanzó esa nueva acción 133 00:06:04,879 --> 00:06:07,139 siempre tiene que volver, entonces 134 00:06:07,139 --> 00:06:09,079 los contadores de programa 135 00:06:09,079 --> 00:06:11,300 se tienen que guardar en algún lado 136 00:06:11,300 --> 00:06:12,819 en algún lado tienen que guardar 137 00:06:12,819 --> 00:06:14,939 en una colección, en algún sitio 138 00:06:14,939 --> 00:06:16,579 los tiene que guardar el sistema operativo 139 00:06:16,579 --> 00:06:19,100 pues el sistema operativo los guarda 140 00:06:19,100 --> 00:06:21,220 en una pila, porque se adapta 141 00:06:21,220 --> 00:06:23,180 exactamente a este funcionamiento 142 00:06:23,180 --> 00:06:25,240 cuando el contador de programa 143 00:06:25,240 --> 00:06:26,959 que está aquí, llama 144 00:06:26,959 --> 00:06:29,040 a una, el contador de programa no, perdón 145 00:06:29,040 --> 00:06:30,939 cuando el sistema operativo llama a una subrutina 146 00:06:30,939 --> 00:06:32,939 este contador de programa 147 00:06:32,939 --> 00:06:35,319 lo apila en la pila 148 00:06:35,319 --> 00:06:36,660 y ahí se queda apilado 149 00:06:36,660 --> 00:06:39,160 y nos vamos a la subrutina, cuando esta subrutina 150 00:06:39,160 --> 00:06:39,740 terminó 151 00:06:39,740 --> 00:06:42,839 se hace el pop porque entonces 152 00:06:42,839 --> 00:06:45,040 el contador de programa que toca sacar 153 00:06:45,040 --> 00:06:47,300 es el último que guarde 154 00:06:47,300 --> 00:06:49,220 porque tengo que volver a la que me llamó a mí 155 00:06:49,220 --> 00:06:51,259 cuando esta subrutina 156 00:06:51,259 --> 00:06:53,139 terminó, vuelvo a hacer 157 00:06:53,139 --> 00:06:55,160 el pop para sacar 158 00:06:55,160 --> 00:06:57,300 el contador de programa 159 00:06:57,300 --> 00:06:58,740 que llamó a esa anterior 160 00:06:58,740 --> 00:07:00,980 entonces el último contador de programa 161 00:07:00,980 --> 00:07:02,779 que yo llamo, el último 162 00:07:02,779 --> 00:07:06,420 lo dejo aquí apilado 163 00:07:06,420 --> 00:07:08,339 porque es el que tengo que devolver 164 00:07:08,339 --> 00:07:10,459 cuando esa subrutina ha terminado, ¿vale? 165 00:07:10,480 --> 00:07:11,339 Es el que tengo que devolver. 166 00:07:11,740 --> 00:07:13,959 Y cuando esa ha terminado, de nuevo, 167 00:07:14,519 --> 00:07:16,300 tendré que sacar al que me llamó a mí. 168 00:07:16,720 --> 00:07:19,100 Entonces, según voy anidando contadores de programa, 169 00:07:19,259 --> 00:07:20,720 según se van anidando subrutinas, 170 00:07:21,560 --> 00:07:23,180 pues esos contadores de programa tienen que ir apilando. 171 00:07:23,439 --> 00:07:25,819 Van entrando así y tienen que ir saliendo 172 00:07:25,819 --> 00:07:29,000 del último en adelante, ¿vale? 173 00:07:31,149 --> 00:07:33,189 Entonces, el sistema operativo tendrá su pila 174 00:07:33,189 --> 00:07:35,389 de contadores de programa donde hace push y pop 175 00:07:35,389 --> 00:07:37,110 según las subrutinas se van terminando. 176 00:07:37,110 --> 00:07:40,670 por eso ocurre 177 00:07:40,670 --> 00:07:43,310 cuando se anidan demasiadas llamadas 178 00:07:43,310 --> 00:07:45,290 a sus rutinas, se anidan muchas 179 00:07:45,290 --> 00:07:47,610 cien, mil, se anidan muchas 180 00:07:47,610 --> 00:07:49,410 depende de la capacidad de la 181 00:07:49,410 --> 00:07:51,529 memoria, claro, que llega un momento 182 00:07:51,529 --> 00:07:53,370 que ¡pum! la pila 183 00:07:53,370 --> 00:07:55,269 dice, ya no me caben tantos 184 00:07:55,269 --> 00:07:57,269 contadores de programa, y sale ahí un 185 00:07:57,269 --> 00:07:59,410 stack overflow tremendo 186 00:07:59,410 --> 00:08:00,149 ¿vale? 187 00:08:01,350 --> 00:08:03,269 entonces, cuando 188 00:08:03,269 --> 00:08:05,350 me puede salir a mí un stack overflow ¡pum! 189 00:08:06,170 --> 00:08:07,290 se me ha ido ya la pila 190 00:08:07,290 --> 00:08:08,709 la porra de tantos contadores de programa 191 00:08:08,709 --> 00:08:10,269 normalmente ocurre 192 00:08:10,269 --> 00:08:13,069 cuando tú estás haciendo un programa 193 00:08:13,069 --> 00:08:14,949 recursivo, de los cuales no hemos 194 00:08:14,949 --> 00:08:16,829 hecho todavía, pero en algún momento tendremos que hacer 195 00:08:16,829 --> 00:08:19,029 alguno, en el cual un programa recursivo 196 00:08:19,029 --> 00:08:20,629 es un programa que se llama a sí mismo 197 00:08:20,629 --> 00:08:22,589 ¿vale? que no pasa nada 198 00:08:22,589 --> 00:08:25,170 yo tengo 199 00:08:25,170 --> 00:08:25,769 un método 200 00:08:25,769 --> 00:08:28,269 que hace no sé qué cosa 201 00:08:28,269 --> 00:08:30,410 mirar por la ventana 202 00:08:30,410 --> 00:08:32,529 entonces el método arranca 203 00:08:32,529 --> 00:08:33,809 acércate a la ventana 204 00:08:33,809 --> 00:08:36,769 ahora, y llama de nuevo 205 00:08:36,769 --> 00:08:38,950 a mirar por la ventana, vale, no pasa nada 206 00:08:38,950 --> 00:08:39,909 mirar por la ventana 207 00:08:39,909 --> 00:08:42,769 acércate a la ventana, me acerco un poquito más 208 00:08:42,769 --> 00:08:44,289 mirar por la ventana 209 00:08:44,289 --> 00:08:46,850 entonces, cada llamada 210 00:08:46,850 --> 00:08:49,090 a mirar por la ventana que viene del anterior 211 00:08:49,090 --> 00:08:50,909 mirar por la ventana, implica 212 00:08:50,909 --> 00:08:52,629 que se lanza una subrutina nueva 213 00:08:52,629 --> 00:08:55,009 luego ese contador de programa 214 00:08:55,009 --> 00:08:56,990 que me ha llamado, lo tengo que guardar 215 00:08:56,990 --> 00:08:58,769 en la pila, entonces 216 00:08:58,769 --> 00:09:00,929 no pasa nada, el programa este 217 00:09:00,929 --> 00:09:03,009 recursivo, tendrá que 218 00:09:03,009 --> 00:09:04,210 tener un id dentro que sea 219 00:09:04,210 --> 00:09:07,110 y te has chocado con la ventana 220 00:09:07,110 --> 00:09:09,309 ya está, no llames más a mirar por la ventana 221 00:09:09,309 --> 00:09:10,049 porque ya te has chocado 222 00:09:10,049 --> 00:09:12,789 entonces ahí ya no hay que meter más controles del programa 223 00:09:12,789 --> 00:09:14,490 y empezamos a salir 224 00:09:14,490 --> 00:09:16,929 pero alguien se puede haber confundido 225 00:09:16,929 --> 00:09:18,909 y ese programa recursivo es 226 00:09:18,909 --> 00:09:21,230 ese método recursivo es mirar por la ventana 227 00:09:21,230 --> 00:09:23,629 da cuatro pasos, mirar por la ventana 228 00:09:23,629 --> 00:09:24,769 luego vuelves a llamar 229 00:09:24,769 --> 00:09:26,649 da cuatro pasos, mirar por la ventana 230 00:09:26,649 --> 00:09:28,649 si alguien lo hace así 231 00:09:28,649 --> 00:09:30,750 es que estás todo el rato 232 00:09:30,750 --> 00:09:32,129 todo el rato acercándote 233 00:09:32,129 --> 00:09:34,370 luego está todo el rato 234 00:09:34,370 --> 00:09:36,450 llamando a sus rutinas, todo el rato llenando 235 00:09:36,450 --> 00:09:38,350 esto hasta el infinito, hasta que llega un momento 236 00:09:38,350 --> 00:09:40,629 que pum, le está cover flow 237 00:09:40,629 --> 00:09:42,429 ¿vale? claro, es que la recursión 238 00:09:42,429 --> 00:09:44,429 no hay que plantearla así, la recursión hay que plantearla 239 00:09:44,429 --> 00:09:46,250 de tal manera que tú te vuelves a llamar 240 00:09:46,250 --> 00:09:48,409 a ti mismo, solo si 241 00:09:48,409 --> 00:09:49,710 no se cumple cierta condición 242 00:09:49,710 --> 00:09:52,690 entonces mirar por la ventana sería, da tres pasos 243 00:09:52,690 --> 00:09:54,330 si no te has chocado 244 00:09:54,330 --> 00:09:56,370 vuelve a mirar por la ventana, vale 245 00:09:56,370 --> 00:09:58,409 das tres pasos, si no te has chocado 246 00:09:58,409 --> 00:09:59,669 vuelve a mirar por la ventana 247 00:09:59,669 --> 00:10:01,590 que de nuevo implicaría, da tres pasos 248 00:10:01,590 --> 00:10:02,450 si no te has chocado 249 00:10:02,450 --> 00:10:05,309 ese sería un programa recursivo bien hecho 250 00:10:05,309 --> 00:10:06,389 voy a dar un momento en que te choques 251 00:10:06,389 --> 00:10:09,549 ahí ya dejamos de apilar contadores 252 00:10:09,549 --> 00:10:11,370 de programa, dejamos de apilarlos 253 00:10:11,370 --> 00:10:12,629 y ya empezamos a sacarlos 254 00:10:12,629 --> 00:10:13,990 ¿vale? 255 00:10:15,250 --> 00:10:17,250 según vamos terminando ya las acciones 256 00:10:17,250 --> 00:10:18,710 y vamos volviendo ya hacia atrás 257 00:10:18,710 --> 00:10:20,429 bueno 258 00:10:20,429 --> 00:10:23,389 todo esto venía a cuento 259 00:10:23,389 --> 00:10:25,529 de que la pila es una estructura muy natural 260 00:10:25,529 --> 00:10:26,250 en la informática 261 00:10:26,250 --> 00:10:29,490 ¿vale? como ejemplo la que usa el sistema operativo 262 00:10:29,490 --> 00:10:31,450 para guardar sus contadores de programa 263 00:10:31,450 --> 00:10:32,789 según va cambiando de proceso. 264 00:10:33,750 --> 00:10:35,629 Bueno, la pila sirve 265 00:10:35,629 --> 00:10:37,450 pues eso, para apilar, desapilar de forma 266 00:10:37,450 --> 00:10:39,590 rápida. ¿Quién es el más rápido 267 00:10:39,590 --> 00:10:41,629 apilando, metiendo y sacando? 268 00:10:41,629 --> 00:10:42,830 Pues la LinkedList. 269 00:10:43,090 --> 00:10:45,309 Pues la LinkedList ofrece 270 00:10:45,309 --> 00:10:47,450 métodos para que trabajemos 271 00:10:47,450 --> 00:10:49,629 nosotros con una LinkedList como si fuera una pila. 272 00:10:50,490 --> 00:10:50,750 ¿Vale? 273 00:10:51,289 --> 00:10:52,169 Por ejemplo. 274 00:10:54,850 --> 00:10:55,809 Entonces, en resumen, 275 00:10:55,990 --> 00:10:56,950 lo que hacen 276 00:10:56,950 --> 00:10:57,570 en resumen 277 00:10:57,570 --> 00:11:01,169 lo que hace meter en la primera posición 278 00:11:01,169 --> 00:11:02,370 exacto 279 00:11:02,370 --> 00:11:04,549 y pop te saca de la primera posición 280 00:11:04,549 --> 00:11:05,769 vale 281 00:11:05,769 --> 00:11:09,470 va a ser la primera posición 282 00:11:09,470 --> 00:11:10,629 sí 283 00:11:10,629 --> 00:11:12,870 vale, pues entonces 284 00:11:12,870 --> 00:11:15,049 imaginaos que yo aquí para ver los métodos 285 00:11:15,049 --> 00:11:16,889 que ofrece, entonces push y pop es la versión 286 00:11:16,889 --> 00:11:19,309 reducida, pero luego ya 287 00:11:19,309 --> 00:11:21,269 linked list te ofrece 288 00:11:21,269 --> 00:11:22,610 un montón ya de variantes 289 00:11:22,610 --> 00:11:25,129 de métodos rápidos para hacer inserciones 290 00:11:25,129 --> 00:11:26,990 y sacados y tener que especificar 291 00:11:26,990 --> 00:11:28,809 posición y nada, para simular 292 00:11:28,809 --> 00:11:31,029 pilas y colas, porque la cola 293 00:11:31,029 --> 00:11:33,169 sería otro concepto, que es 294 00:11:33,169 --> 00:11:34,990 yo voy 295 00:11:34,990 --> 00:11:36,330 metiendo todos en filita 296 00:11:36,330 --> 00:11:38,909 y la cola es justo 297 00:11:38,909 --> 00:11:40,830 al contrario de la pila, como van todos 298 00:11:40,830 --> 00:11:42,350 en fila, el 299 00:11:42,350 --> 00:11:43,929 primero que entró 300 00:11:43,929 --> 00:11:46,830 es el último, es el primero 301 00:11:46,830 --> 00:11:48,950 que sale, ¿vale? una cola 302 00:11:48,950 --> 00:11:50,850 es lo contrario de una 303 00:11:50,850 --> 00:11:54,620 pila, ¿vale? 304 00:11:55,019 --> 00:11:56,460 una cola es pues 305 00:11:56,460 --> 00:11:59,639 la cola del cajero 306 00:11:59,639 --> 00:12:01,620 como siempre, pues estás en la cola 307 00:12:01,620 --> 00:12:03,559 del cajero, el primero 308 00:12:03,559 --> 00:12:05,120 que llegó a la cola del cajero 309 00:12:05,120 --> 00:12:07,179 es el primero que se va 310 00:12:07,179 --> 00:12:08,320 el primero que termina 311 00:12:08,320 --> 00:12:11,539 que es justo lo contrario 312 00:12:11,539 --> 00:12:13,179 a una pila, entonces 313 00:12:13,179 --> 00:12:14,980 una cola tiene un comportamiento 314 00:12:14,980 --> 00:12:17,500 no lifo, sino fifo 315 00:12:17,500 --> 00:12:19,120 el primero que llegó 316 00:12:19,120 --> 00:12:20,980 es el primero que termina 317 00:12:20,980 --> 00:12:21,980 ¿vale? 318 00:12:23,799 --> 00:12:25,639 bueno, pues simulando estas ideas 319 00:12:25,639 --> 00:12:27,120 estos conceptos, LinkedList 320 00:12:27,120 --> 00:12:28,539 me ofrece métodos 321 00:12:28,539 --> 00:12:32,500 que uno pues los puede mirar 322 00:12:32,500 --> 00:12:34,240 pero vamos, tampoco tienen mayor 323 00:12:34,240 --> 00:12:37,080 por ejemplo 324 00:12:37,080 --> 00:12:39,159 si yo me hago aquí solamente una LinkedList 325 00:12:39,159 --> 00:12:40,759 para mirar 326 00:12:40,759 --> 00:12:58,549 vale, porque antes no sé si los veíais bien 327 00:12:58,549 --> 00:13:06,149 vale, pues LinkedList 328 00:13:06,149 --> 00:13:16,629 vale, pues LinkedList 329 00:13:16,629 --> 00:13:18,570 lógicamente implementa 330 00:13:18,570 --> 00:13:20,389 todos los de list, ahí no hay alternativa 331 00:13:20,389 --> 00:13:22,129 tiene que implementarlos todos 332 00:13:22,129 --> 00:13:24,269 y luego además 333 00:13:24,269 --> 00:13:26,690 Añade algunos que no hemos visto en la list 334 00:13:26,690 --> 00:13:28,809 Añade algunos 335 00:13:28,809 --> 00:13:30,549 Como 336 00:13:30,549 --> 00:13:33,250 Estos de aquí 337 00:13:33,250 --> 00:13:41,539 Estos de aquí 338 00:13:41,539 --> 00:13:42,700 Los que empiezan con P 339 00:13:42,700 --> 00:13:44,379 ¿Vale? 340 00:13:44,860 --> 00:13:47,279 Están relacionados con simular el comportamiento 341 00:13:47,279 --> 00:13:47,940 De una cola 342 00:13:47,940 --> 00:13:51,580 La lifo sería la pila 343 00:13:51,580 --> 00:13:52,320 ¿Vale? 344 00:13:52,340 --> 00:13:54,519 Entonces uno puede mirar lo que hace cada uno de ellos 345 00:13:54,519 --> 00:13:56,840 Pues si yo hago un pick a una lista 346 00:13:56,840 --> 00:13:59,600 Te devuelve 347 00:13:59,600 --> 00:14:01,980 El primero de todos 348 00:14:01,980 --> 00:14:03,460 El que está en la cabecera 349 00:14:03,460 --> 00:14:04,639 ¿Vale? 350 00:14:05,639 --> 00:14:07,179 Entonces este es el comportamiento 351 00:14:07,179 --> 00:14:10,139 ¿Vale? Un comportamiento como si fuera una cola 352 00:14:10,139 --> 00:14:11,600 ¿Vale? 353 00:14:13,580 --> 00:14:14,100 Este 354 00:14:14,100 --> 00:14:15,879 Te devuelve 355 00:14:15,879 --> 00:14:17,419 Es como el otro ¿Vale? 356 00:14:18,399 --> 00:14:20,019 Creo que la diferencia 357 00:14:20,019 --> 00:14:21,019 Es 358 00:14:21,019 --> 00:14:22,899 En uno 359 00:14:22,899 --> 00:14:26,879 Y este sin embargo 360 00:14:26,879 --> 00:14:32,559 La única diferencia es esto de aquí 361 00:14:32,559 --> 00:14:36,559 Este pues te devuelve 362 00:14:36,559 --> 00:14:37,940 Pero no te elimina de la lista 363 00:14:37,940 --> 00:14:38,879 No te lo elimina 364 00:14:38,879 --> 00:14:41,200 El último 365 00:14:41,200 --> 00:14:43,679 Paul 366 00:14:43,679 --> 00:14:45,960 Te devuelve y te borra 367 00:14:45,960 --> 00:14:47,039 La cabecera 368 00:14:47,039 --> 00:14:48,840 ¿Vale? 369 00:14:54,879 --> 00:14:55,440 Entonces 370 00:14:55,440 --> 00:14:59,120 El tema es que si vosotros hacéis 371 00:14:59,120 --> 00:15:01,340 Un linked list y veis estos métodos 372 00:15:01,340 --> 00:15:03,200 De aquí, pues estos métodos 373 00:15:03,200 --> 00:15:05,059 De aquí, el push y el pop 374 00:15:05,059 --> 00:15:06,860 Están aquí, pues el push 375 00:15:06,860 --> 00:15:08,419 te apila un elemento 376 00:15:08,419 --> 00:15:11,179 en la pila representada 377 00:15:11,179 --> 00:15:12,960 por esta lista, te dice 378 00:15:12,960 --> 00:15:15,039 esta lista podría representar una pila 379 00:15:15,039 --> 00:15:17,159 lógicamente, porque no, es un montón de elementos 380 00:15:17,159 --> 00:15:18,980 pues push 381 00:15:18,980 --> 00:15:20,019 te 382 00:15:20,019 --> 00:15:23,419 te lo pondría en la cabecera 383 00:15:23,419 --> 00:15:25,179 de la lista esa que tú 384 00:15:25,179 --> 00:15:27,299 estás usando como si fuera una pila, ya está 385 00:15:27,299 --> 00:15:29,259 pop sin embargo 386 00:15:29,259 --> 00:15:31,240 te lo quita 387 00:15:31,240 --> 00:15:33,220 ves, te quita 388 00:15:33,220 --> 00:15:34,980 el elemento de esa pila 389 00:15:34,980 --> 00:15:38,570 lo borra y te lo devuelve 390 00:15:38,570 --> 00:15:41,309 es lo mismo 391 00:15:41,309 --> 00:15:42,470 que remove first 392 00:15:42,470 --> 00:15:45,009 te lo dice aquí, es exactamente lo mismo 393 00:15:45,009 --> 00:15:45,809 que remove first 394 00:15:45,809 --> 00:15:48,769 pero ha cambiado el nombre, es el mismo método 395 00:15:48,769 --> 00:15:49,549 con otro nombre 396 00:15:49,549 --> 00:15:52,570 simplemente, pues bueno, porque si tú estás 397 00:15:52,570 --> 00:15:54,549 trabajando con esa lista, pues va una pila 398 00:15:54,549 --> 00:15:56,450 pues puedes hacerle un pop 399 00:15:56,450 --> 00:15:57,750 y el código queda más claro 400 00:15:57,750 --> 00:16:00,750 es a efectos de elegibilidad de código 401 00:16:00,750 --> 00:16:02,409 de comodidad, de que el código 402 00:16:02,409 --> 00:16:04,570 quede como más explicativo 403 00:16:04,570 --> 00:16:05,970 Que es lo que está pasando 404 00:16:05,970 --> 00:16:08,029 Tú ves un pop y dices, ah, es que esto es una pila 405 00:16:08,029 --> 00:16:09,309 A lo mejor eso tiene implicaciones 406 00:16:09,309 --> 00:16:11,470 Ves un remove first y a lo mejor 407 00:16:11,470 --> 00:16:13,049 Y ahí no te queda tan claro que eso 408 00:16:13,049 --> 00:16:14,929 Esté funcionando como una pila 409 00:16:14,929 --> 00:16:16,289 ¿Vale? 410 00:16:17,110 --> 00:16:18,230 Bueno, pues ya está 411 00:16:18,230 --> 00:16:20,730 Y poco más añade 412 00:16:20,730 --> 00:16:24,409 Una linked list respecto a la list 413 00:16:24,409 --> 00:16:25,990 Añade esos métodos relacionados 414 00:16:25,990 --> 00:16:27,730 Con trabajar como si fuera una pila 415 00:16:27,730 --> 00:16:29,950 Que no hacen falta ninguno de ellos 416 00:16:29,950 --> 00:16:32,309 Todos ellos los podemos simular 417 00:16:32,309 --> 00:16:33,529 Con los genéricos de list 418 00:16:33,529 --> 00:16:34,549 Con add, con remove 419 00:16:34,549 --> 00:16:36,889 Pero los añade con este nombre 420 00:16:36,889 --> 00:16:39,450 Los añade con este nombre para simular 421 00:16:39,450 --> 00:16:41,750 El funcionamiento de colas 422 00:16:41,750 --> 00:16:43,730 Y de pilas 423 00:16:43,730 --> 00:16:45,629 Para que quede como el código 424 00:16:45,629 --> 00:16:46,450 Más explicativo 425 00:16:46,450 --> 00:16:49,980 Ya está, vale 426 00:16:49,980 --> 00:16:58,009 Bueno y vamos a hacer una cosa 427 00:16:58,009 --> 00:17:03,879 Como ya os habéis 428 00:17:03,879 --> 00:17:05,480 Aburrido mucho, ahora en el cambio 429 00:17:05,480 --> 00:17:06,700 Voy a subir unos ejercicios 430 00:17:06,700 --> 00:17:09,859 Lo del iterador y todo eso lo vamos a ir 431 00:17:09,859 --> 00:17:11,680 Dejando para entre medias 432 00:17:11,680 --> 00:17:12,680 De los ejercicios 433 00:17:12,680 --> 00:17:15,920 Ahora en el cambio lo subo y arranca y va a hacer cosas 434 00:17:15,920 --> 00:17:16,559 ¿Vale? 435 00:17:17,579 --> 00:17:19,480 Venga, pues paramos aquí entonces