Week 5- Section (Data Structure) Flashcards

(60 cards)

1
Q

¿Cuáles son las tres operaciones básicas que se pueden realizar con las estructuras de datos mencionadas en la sección?

A

Inserción, eliminación y búsqueda.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Qué es una lista enlazada (linked list)?

A

Es una serie de nodos conectados entre sí mediante punteros.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿En qué se diferencia la disposición de una lista enlazada de la de un arreglo (array) en memoria?

A

Los arreglos están en celdas contiguas, mientras que los nodos de las listas enlazadas están dispersos y conectados por direcciones.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

¿Qué tipo de dato es un puntero?

A

Es un tipo de dato que almacena la dirección de memoria de otra variable.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

En la definición de un nodo, ¿qué información almacena usualmente el campo next?

A

La dirección de memoria del siguiente nodo en la lista.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

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?

A

Para poder referirse a la estructura simplemente como node dentro de su propia definición y en el resto del código.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

¿Qué función de C se utiliza para asignar dinámicamente el espacio de memoria necesario para un nuevo nodo?

A

malloc

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

¿Qué valor devuelve malloc si no puede asignar la memoria solicitada?

A

NULL

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

¿Cuál es la sintaxis correcta para acceder al atributo phrase de un nodo a través de un puntero n?

A

n->phrase

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

¿Por qué se utiliza el operador flecha (->) en lugar del punto (.) al trabajar con nodos en listas enlazadas?

A

Porque estamos accediendo a atributos a través de un puntero a una estructura.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Al crear una lista enlazada, ¿a qué valor debe inicializarse el puntero list originalmente para indicar que está vacía?

A

NULL

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

En el proceso de inserción, ¿qué sucede si hacemos list = n antes de conectar el nuevo nodo al resto de la lista?

A

Se pierde la dirección del resto de la lista, causando una fuga de memoria (memory leak).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Al insertar un nodo n al principio de una lista, el primer paso es establecer n->next = \_\_\_\_\_.

A

list

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

¿Cuál es el propósito del puntero list en una lista enlazada?

A

Servir como punto de referencia que siempre apunta al primer elemento de la lista.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

¿Qué sucede si intentas liberar la memoria de una lista haciendo simplemente free(list)?

A

Se libera el primer nodo, pero se pierde la conexión y el acceso a todos los nodos subsiguientes.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Para eliminar una lista de forma segura, se necesita un puntero _____ que mantenga la dirección del siguiente nodo antes de liberar el actual.

A

temporal (o intermediario)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

En el ciclo while para liberar una lista, ¿cuál es la condición de parada típica?

A

Que el puntero actual sea igual a NULL.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

¿Qué estructura de datos combina un arreglo con listas enlazadas?

A

Tabla Hash (Hash Table).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

¿Qué es una cubeta (bucket) en el contexto de una tabla hash?

A

Es cada uno de los índices del arreglo principal que apunta al inicio de una lista enlazada.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

¿Cuál es la función principal de una ‘función hash’?

A

Tomar un dato (como una cadena) y devolver un índice numérico correspondiente a una cubeta de la tabla.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

¿Qué ventaja principal ofrece una tabla hash frente a una lista enlazada simple?

A

Permite una búsqueda mucho más eficiente al reducir el número de elementos a recorrer.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

¿Qué característica define a una ‘buena’ función hash?

A

Produce una distribución uniforme de los datos entre todas las cubetas disponibles.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

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?

A

0

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

¿Cuál es el riesgo de tener muy pocas cubetas en una tabla hash?

A

Se generan muchas colisiones, haciendo que las listas enlazadas sean largas y la búsqueda sea lenta.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
¿Cuál es el riesgo de tener demasiadas cubetas (por ejemplo, un millón) en una tabla hash?
Se utiliza una cantidad excesiva de memoria de forma innecesaria.
26
¿Qué estructura de datos se asemeja a un árbol donde cada nodo representa un carácter individual?
Trie.
27
¿Por qué un Trie es eficiente para almacenar palabras con prefijos comunes como 'hello' y 'hey'?
Porque comparten los nodos iniciales (`h`, `e`) en lugar de duplicar la información.
28
En el problema 'Inheritance', ¿qué dos componentes principales tiene la estructura `person`?
Un arreglo de alelos (tipos de sangre) y un arreglo de punteros a sus dos padres.
29
¿Qué técnica de programación se utiliza en `create_family` para generar múltiples generaciones?
Recursión.
30
En la función recursiva de herencia, ¿qué valor se resta en cada llamada para alcanzar el caso base?
El número de generaciones (se pasa `generations - 1`).
31
¿Cuál es el caso base en la creación de la familia en el problema de herencia?
Cuando el número de generaciones es igual a 1.
32
Cuando se llega al caso base en 'Inheritance', ¿a qué valor se asignan los punteros de los padres?
`NULL`
33
En el problema de herencia, si una persona tiene padres, ¿cómo se determinan sus alelos?
Se eligen aleatoriamente de los alelos de sus dos padres.
34
¿Cómo se asegura la aleatoriedad al elegir un alelo de un padre en C?
Usando la función `rand()` combinada con el operador módulo (`% 2`).
35
En la recursión de 'Inheritance', ¿qué sucede con el flujo del programa después de que se resuelve el caso base?
La función retorna y comienza a llenar la información de los hijos 'hacia arriba' en la pila de llamadas.
36
¿Cuál es la importancia de la función `free_family` en el problema de herencia?
Asegurar que toda la memoria asignada dinámicamente para cada persona en el árbol sea liberada.
37
Al liberar la memoria de un árbol familiar recursivamente, ¿qué debe hacerse antes de liberar a la persona actual (`free(p)`)?
Llamar recursivamente a la función para liberar a ambos padres.
38
El operador módulo `% 3` en una función hash que elige alelos devolvería valores en el rango de _____ a _____.
0 a 2
39
¿Qué sucede si no se libera la memoria asignada con `malloc`?
Se produce una fuga de memoria que puede agotar los recursos del sistema.
40
¿Cuál es el propósito de usar `sizeof(node)` dentro de `malloc`?
Indicarle a la computadora exactamente cuántos bytes de memoria debe reservar para esa estructura específica.
41
En una lista enlazada, el último nodo de la cadena siempre debe apuntar a _____.
`NULL`
42
¿Cómo se llama el proceso de convertir una cadena como 'hey' en un número entero para una tabla hash?
Hashing.
43
En el código de la sección, ¿qué hace `toupper(phrase[0]) - 'A'`?
Convierte la primera letra a mayúscula y calcula su posición numérica en el alfabeto (0-25).
44
¿Por qué la función hash debe ser 'determinista'?
Para asegurar que la misma entrada siempre devuelva el mismo índice y se pueda encontrar el dato después.
45
En la recursión, la condición que detiene las llamadas adicionales se conoce como _____.
Caso base.
46
¿Qué representa cada círculo en el diagrama de un Trie?
Un carácter individual de una palabra o frase.
47
Si `n` es un puntero a un nodo, ¿cuál es la forma equivalente de escribir `n->next` usando desreferenciación?
`(*n).next`
48
En la función `unload`, ¿qué línea de código actualiza el puntero `list` para avanzar al siguiente nodo después de guardar su dirección en `ptr`?
`list = ptr;`
49
Para el problema de herencia, ¿qué tipo de dato devuelve la función `create_family`?
Un puntero a la estructura `person` (`person *`).
50
¿Qué librería de C es necesaria para usar las funciones `malloc` y `free`?
`stdlib.h`
51
En el problema de herencia, ¿por qué se asignan los alelos aleatoriamente solo en el caso base?
Porque esas personas no tienen padres en el árbol de quienes heredar la información.
52
¿Qué pasaría si la función hash devolviera un número fuera del rango del arreglo de la tabla hash?
Se intentaría acceder a memoria inválida, causando probablemente un error de segmentación (segmentation fault).
53
Al crear un nuevo nodo en un ciclo, ¿por qué es importante verificar `if (n == NULL)`?
Para prevenir errores al intentar acceder a miembros de un puntero que no apunta a memoria válida.
54
¿Qué almacena el puntero `ptr` durante la eliminación de una lista enlazada?
La dirección del siguiente nodo para no perder la referencia a la lista restante.
55
¿Cuál es la ventaja de usar una tabla hash con 'encadenamiento' (listas enlazadas en cada cubeta)?
Permite manejar colisiones donde múltiples entradas generan el mismo índice hash.
56
En una lista enlazada, ¿cuál es el tiempo de ejecución (Big O) para buscar un elemento en el peor de los casos?
$O(n)$
57
En una tabla hash perfecta (sin colisiones), ¿cuál es el tiempo de ejecución ideal para una búsqueda?
$O(1)$
58
¿Cuál es el primer paso lógico al implementar la función `free_family(person *p)`?
Verificar si el puntero `p` es `NULL` (caso base).
59
En el contexto de estructuras de datos, ¿qué significa 'abstraer'?
Ocultar los detalles complejos de implementación detrás de una interfaz o concepto más simple.
60
Si el puntero `list` se pierde y no se ha liberado la memoria, ¿cómo se llama técnicamente a este fallo?
Fuga de memoria (Memory leak).