¿Cuáles son las tres operaciones básicas que se pueden realizar con las estructuras de datos mencionadas en la sección?
Inserción, eliminación y búsqueda.
¿Qué es una lista enlazada (linked list)?
Es una serie de nodos conectados entre sí mediante punteros.
¿En qué se diferencia la disposición de una lista enlazada de la de un arreglo (array) en memoria?
Los arreglos están en celdas contiguas, mientras que los nodos de las listas enlazadas están dispersos y conectados por direcciones.
¿Qué tipo de dato es un puntero?
Es un tipo de dato que almacena la dirección de memoria de otra variable.
En la definición de un nodo, ¿qué información almacena usualmente el campo next?
La dirección de memoria del siguiente nodo en la lista.
Al definir una estructura de nodo, ¿por qué se añade el nombre node después de la palabra struct y también al final del typedef?
Para poder referirse a la estructura simplemente como node dentro de su propia definición y en el resto del código.
¿Qué función de C se utiliza para asignar dinámicamente el espacio de memoria necesario para un nuevo nodo?
malloc
¿Qué valor devuelve malloc si no puede asignar la memoria solicitada?
NULL
¿Cuál es la sintaxis correcta para acceder al atributo phrase de un nodo a través de un puntero n?
n->phrase
¿Por qué se utiliza el operador flecha (->) en lugar del punto (.) al trabajar con nodos en listas enlazadas?
Porque estamos accediendo a atributos a través de un puntero a una estructura.
Al crear una lista enlazada, ¿a qué valor debe inicializarse el puntero list originalmente para indicar que está vacía?
NULL
En el proceso de inserción, ¿qué sucede si hacemos list = n antes de conectar el nuevo nodo al resto de la lista?
Se pierde la dirección del resto de la lista, causando una fuga de memoria (memory leak).
Al insertar un nodo n al principio de una lista, el primer paso es establecer n->next = \_\_\_\_\_.
list
¿Cuál es el propósito del puntero list en una lista enlazada?
Servir como punto de referencia que siempre apunta al primer elemento de la lista.
¿Qué sucede si intentas liberar la memoria de una lista haciendo simplemente free(list)?
Se libera el primer nodo, pero se pierde la conexión y el acceso a todos los nodos subsiguientes.
Para eliminar una lista de forma segura, se necesita un puntero _____ que mantenga la dirección del siguiente nodo antes de liberar el actual.
temporal (o intermediario)
En el ciclo while para liberar una lista, ¿cuál es la condición de parada típica?
Que el puntero actual sea igual a NULL.
¿Qué estructura de datos combina un arreglo con listas enlazadas?
Tabla Hash (Hash Table).
¿Qué es una cubeta (bucket) en el contexto de una tabla hash?
Es cada uno de los índices del arreglo principal que apunta al inicio de una lista enlazada.
¿Cuál es la función principal de una ‘función hash’?
Tomar un dato (como una cadena) y devolver un índice numérico correspondiente a una cubeta de la tabla.
¿Qué ventaja principal ofrece una tabla hash frente a una lista enlazada simple?
Permite una búsqueda mucho más eficiente al reducir el número de elementos a recorrer.
¿Qué característica define a una ‘buena’ función hash?
Produce una distribución uniforme de los datos entre todas las cubetas disponibles.
Si una tabla hash tiene 26 cubetas (una por cada letra del alfabeto), ¿a qué índice se enviaría la palabra ‘Apple’ usando una función basada en la primera letra?
0
¿Cuál es el riesgo de tener muy pocas cubetas en una tabla hash?
Se generan muchas colisiones, haciendo que las listas enlazadas sean largas y la búsqueda sea lenta.