¿Sabías que este tipo de estructuras están en la implementación de muchísimas de las cosas que usamos en el alto nivel? Desde las bases de datos hasta la inteligencia artificial. ¡Por eso son tan importantes!
@ericdumortier91746 ай бұрын
Muy bien explicado! Saludos desde Esperanza
@delgit1jmme7484 ай бұрын
perfecto Saludos 👍
@slidkag4 жыл бұрын
No vi ni la mitad del video, ya ya me suscribí y le di like. Sos una genia, muy muy claro hasta ahora.
@DryadRoot2 жыл бұрын
esta todo explicado de manera muy muy clara y ademas a un ritmo optimo, la verdad 10 puntos este canal!
@brunomartinezramirez18912 жыл бұрын
que bien canal estos temas no son tan fáciles de entender pero tú lo haces que sea entendible de manera clara gracias❤️
@junniorsamirniquinvaldez74433 жыл бұрын
Buen video, aprendí cosas nuevas
@zggpirix18312 жыл бұрын
por que no tiene mas videos como este?? como lo que son lista doblemente ligadas, listas circulares, etc?? de verdad enseñas muy bien y ayudarías a muchos, me incluyo, que se les dificulta estos temas por que los profesores no enseñan como deben de enseñar, por ejemplo en mi universidad me da clases de estructura de datos un Doctor que la verdad ni le entiendo ni una palabra, pero aquí contigo se me hace muy fácil aprender estos temas...De nuevo muchas gracias.
2 жыл бұрын
¡Me alegro de que te sean útiles! En realidad estos videos de listas enlazadas son de los primeros que hice, porque fueron para mis alumnos y en ese momento el curso no incluía más que listas simples. Pero tengo intenciones de hacer más videos con los temas que mencionas. ¡Gracias! 😊
@joaquin56273 жыл бұрын
Zarpado video, una observación dentro de la stack tambien se almacenan variable dinamicas. La heap se utiliza en la reserva manual de memoria dinamica. Por lo menos en c++ 11 en adelante pero creo que antes tambien.
@whistCS9 ай бұрын
Buen video
@luisignacioatarama53303 жыл бұрын
super crack
@andrewjackson5085 жыл бұрын
no se imprimieron los asteriscos , el que me desconcierta es el que va en el parametro Nodo antes del ampersand, es del final del primer video en el que explicas la importancioa del delete para evitar memory leaks, gracias
5 жыл бұрын
No comprendí lo que decías de que no se imprimieron los asteriscos... En la función que se muestra en el video, que recorre una lista imprimiendo sus datos, se debería imprimir el número contenido en cada nodo: for (Nodo* p=inicio; p!=nullptr; p=p->siguiente){ cout dato cumple una doble tarea: desreferenciar al puntero p (es decir, indicar "vayamos a ver qué hay en la dirección que almacena el puntero p", y lo que hay es un dato de tipo Nodo), y seleccionar un campo de ese objeto (el campo dato). Como ese campo es de tipo int, lo que se imprime entonces es un número. No debería imprimirse ningún asterisco. En cuanto a la instrucción delete, es la opuesta a la instrucción new: mientras que new hace que se reserve un espacio en la memoria, delete hace que se libere un espacio (que se deje disponible para guardar cualquier otra cosa). Al hacer la operación new se nos da como resultado el espacio de memoria (la dirección) que se reservó, y como es una dirección de memoria la podremos guardar en un puntero. Al hacer delete le tenemos que indicar qué dirección queremos liberar y por eso le indicamos esa dirección mediante un puntero. Y lo que hace es "marcar como libre" ese espacio. Tal vez el puntero sobre el cual hicimos delete siga conteniendo la dirección "borrada", pero ya no será un puntero válido, por lo cual no podremos desreferenciarlo para ir a buscar un dato, ya que ese espacio está marcado como libre para ser usado cuando se lo necesite. El "memory leak" se da cuando tenemos un espacio reservado (porque lo hemos reservado en algún momento con la instrucción new) que no está siendo apuntado por nada, de manera que es imposible acceder a él. Acá tenemos que recordar que las variables en la memoria heap no tienen un nombre, como sucede con las de la stack. Entonces, sólo podemos acceder a ellas mediante punteros. Si no tenemos punteros para acceder, las hemos perdido. Y como la memoria heap no es auto-gestionada como la stack (al menos en la configuración por defecto de C++), si no le decimos "este espacio ya no se va a usar" sigue teniéndolo reservado. Si tenemos el espacio reservado pero a la vez no podemos acceder a él porque no hay puntero que lo pueda acceder, se provoca un "memory leak" (o "fuga de memoria" como suele llamarse en español).
@andrewjackson5085 жыл бұрын
si si , me respondiste ya en la anterior respuesta, lo de que no se imprimieron los asteriscos es e mi comentario, pero si lo entendiste y me resposdiste , veras te lo corto y pego." Entonces, uniendo los dos operadores, podríamos decir que una función tiene un parámetro que es un "alias" (referencia) de un puntero: void funcion(Nodo* &inicio) Al invocar a esta función deberemos pasarle como argumento un puntero a un dato de tipo Nodo, pero dentro de la función estaremos usando el identificador inicio como alias de ese argumento que le hemos pasado. Todo cambio que se haga al parámetro inicio se estará haciendo también sobre el argumento, porque ambos son el mismo dato (referencian a la misma posición de memoria).". te queria comentar, veo que le pones mucha pasion a enseñar, pues te digo de verdad que el teme de punteros lo explicas muy bien, y que he visto muchos y que hablo ingles y los veo tambien en ingles, pero que el tema de punteros se explica mal, ademas de que es dificil esta mal explicado y tu me has resuelto dudas simples, la que te he preguntado es un poco mas compleja y me la has explicado bien, pero por si te recompensa te digo que he visto todos lo videos de pauek de deividcoptero de jesus conde de masterhehegar etc etc y tu explicacion es rebuena como decis vosotros, y no te lo digo por decir, ya que nunca le escribo a nadie, esque son conceptos que hay que decir y tienes la intuicion de saber explicar pequeños detalles que hacen falta para entender punteros, mira por ejemplo, aunque parezca una tonteria, un puntero esta en la pila y tiene el tamaño mas o menos de 4 bytes apunte a lo que apunte, aunque apunte al objeto de una clase de 4000 metodos y 100 atributos , pero el espacio de memoria que se guerda en el heap ya es otra cosa, y eso es por lo que un puntero es tan util, muchas gracias
5 жыл бұрын
Muchas gracias por tus palabras 🙂 Realmente enseñar es algo que disfruto, no sólo por ayudar a quien pueda beneficiarse de algo que yo sepa, sino porque también es una grandiosa manera de aprender. Y las preguntas que pueda recibir son siempre oportunidades para develar algún detalle más, investigar algún punto de vista diferente o descubrir cómo cada persona piensa de forma totalmente creativa y distinta al resto. Tanto en mis clases de la universidad como en las virtuales por este canal, siento que me beneficio muchísimo de las preguntas, y por eso me gusta dedicarles el tiempo necesario para responder de la mejor forma que pueda. Así que, ¡gracias!
@harlesepc59062 жыл бұрын
Una pregunta un nodo con 3 variables un tipo int, un tipo char mas un *apuntador.. pregunto el apuntador queda guardado en otra direccion de la memoria heap, y las dos variables int y char quedarian guardadas en una misma direccion de la memoria heap ?
@andrewjackson5085 жыл бұрын
hola que tal, me suscribo , tremendisima exp`licacion de punteros , muy buena, y yo no programo, solo que veo videos de c++ exclusivamente y desde hace 5 años, esta explicacion es brutal. siampre hay cosas que no entiendo, me pocrias explicar el uso de un asterisco y un ampersand a la vez en el mismno parametro? esa es de las cosas que te crujen la mente de la programacion. entiendo que se use const *int, o const &char, en un parametro para optimizar, ¿pero----- bool elimina (Nodo* &inicia)? ----eso va mas alla de mi capacidad, ¿podrias darme una pequeña pista? gracias de antemano.
5 жыл бұрын
¡Muchas gracias! Sobre tu pregunta respecto al * y al & juntos, en realidad son independientes. Pueden aparecer juntos, como también podría aparecer un * solo o un & solo. Paso a detallar el concepto de cada uno: El operador & se usa para dos cosas en C++: una es para indicar "obtener la dirección de una variable". Por ejemplo: int N=524; cout
@Obishman5 жыл бұрын
Primero muchas gracias por el video, ahora, a mi que vengo de tu curso de programación desde cero con Python, este tema de las listas en C++ me parece re complicado con respecto a las listas que vi en Python, me preguntaba si vale la pena esta complicación, intuyo que debe haber alguna ventaja con respecto a las listas en Python, es así? el código ejecuta mas rápido? me podrías aclarar?
5 жыл бұрын
¡Hola! En realidad el tipo de dato llamado "lista" en Python tiene poca relación con las listas enlazadas. Python es un lenguaje de alto nivel donde muchas cosas ya están "resueltas". C++ es un lenguaje que nos permite manejar tanto el alto como el bajo nivel. Si quisiéramos encontrar un equivalente de las listas de Python, en C++ podrían ser los arreglos dinámicos o los vectores. Las listas enlazadas, en cambio, son una de las estructuras de datos de bajo nivel que forman la base de muchas estructuras de alto nivel. Otra de estas estructuras de datos básica son los arreglos y, de hecho, las "listas" de Python están implementadas ("por dentro") como arreglos dinámicos. También, estas "listas enlazadas" que podemos hacer en C++ se centran fuertemente en el uso de punteros, algo que en Python tampoco vemos pero que está presente todo el tiempo, ya que en Python todo es un objeto y las variables no son más que referencias (punteros) a direcciones de memoria. Es por eso que Python suele ser más sencillo: la complejidad está "escondida" por detrás. Esto puede ser bueno para evitar preocuparnos por estos temas y dedicarnos únicamente a lo que queremos hacer, o puede ser malo si necesitamos tener un cierto control que el alto nivel no nos permite tener (por estar "escondiendo" cosas). En cuanto a tu pregunta sobre si el código ejecuta más rápido, suponiendo un mismo entorno, normalmente los lenguajes interpretados (como Python) son más lentos que los lenguajes compilados (como C++), pero esto se debe a varios otros motivos (por ejemplo, que en un lenguaje compilado primero se hace una "traducción" completa del código que se guarda para ejecutarse las veces que se requiera, mientras que los interpretados van "traduciendo" a medida que ejecutan). Finalmente, sobre si necesitas aprender de estructuras de datos (como los arreglos y las listas enlazadas), eso dependerá de tus objetivos. Posiblemente no te sean tan útiles si lo que te interesa es programar como hobby o como habilidad complementaria de alguna otra (por ejemplo, si te dedicas a la física y necesitas programar para analizar ciertos datos), pero sí son muy importantes para dedicarse a la programación profesionalmente e incluso muchas empresas multinacionales piden resolver ejercicios de estos temas en sus entrevistas laborales. Espero haber ayudado a aclarar tu duda :)
@Obishman5 жыл бұрын
@ Que te puedo decir, estoy impresionado, resulta que no solo tus videos son buenísimos sino que además le pones mucha dedicación a las respuestas, Gracias! Si, aclaraste mis dudas totalmente y ahora tengo mas ganas de seguir con las listas enlazadas de C++. Vos decías “si lo que te interesa es programar como hobby o como habilidad complementaria de alguna otra…..” te comento que es como hobby, me gustaría hacerlo como profesión (cuando estuviera preparado) pero ya estoy un poco grandecito creo, tengo 56 años... Yo soy técnico químico, pero en un punto hace 20 años (y gracias a la programación en Basic) me empecé a dedicar a la parte de servicio técnico. Actualmente instalo, reparo y doy capacitación sobre instrumentos de análisis químico y láseres para investigación. En fin, siempre me apasionó la ciencia y la tecnología y en especial la óptica. Estoy aprendiendo programación porque lo que quiero hacer es un programa para calcular la trayectoria de rayos de luz a través de un sistema de lentes para evaluar la performance del sistema, se que ya hay muy buenos programas para eso pero quiero hacerlo a mi manera. Gracias de nuevo, saludos.
5 жыл бұрын
¡Muy interesante todo lo que comentás! Por supuesto que hacer ejercicios de listas (o cualquier estructura de datos) a bajo nivel te va a ayudar mucho a desarrollar la algoritmia. En general, el bajo nivel es bueno para eso porque obliga a resolver los problemas con pocas herramientas. ¡Éxitos!
@hernibruno6 жыл бұрын
Hacelo en Python!
6 жыл бұрын
El concepto es independiente del lenguaje. Los algoritmos serían muy similares aunque pueden implementarse con variantes.