PACIAL II Flashcards

win data structure parcial 2

1
Q

Considere la operación borrarExtremos que recibe una lista y elimina el primer elemento y el último elemento. ¿Cuál es la menor complejidad que se puede obtener para esta operación? ¿Qué implementación de listas se debería usar para obtener dicha complejidad? Explique.

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

Explique con un ejemplo del mundo real la diferencia entre los conceptos de objeto y clase.

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

Zlatan escribe una implementación del TAD Lista en donde cada nodo tiene
un apuntador al nodo siguiente y un apuntador al inicio de la lista. Zlatan se da cuenta de
que en algunos casos tener ciertos atributos públicos en la clase que representa la lista le
permite escribir algunas operaciones de forma más eficiente. ¿Es correcto afirmar que lo que realiza Zlatan es acorde al principio de abstracción de datos? Explique.

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

Explique qué es el principio de abstracción en tipos abstractos de datos.

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

Zlatan está discutiendo con su amigo Teofilo sobre el uso de tipos abstractos
de datos. Zlatan dice que implementar TADs mediante clases en C++ favorece respetar
el principio de abstracción mientras que Teofilo dice que eso no es correcto ya que en
cualquier caso se puede acceder directamente a los atributos de las clases y manipular el dato directamente. ¿quién tiene la razón? Explique.

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

Considere la operación correrElementos que recibe una lista l y rota los ele-
mentos en l una posición a la derecha. De esta manera, si se tiene una lista

l = [3, 4, 2, 1, 11, 8], la invocación correrElementos(l) debería hacer que l quede
con los elementos [8, 3, 4, 2, 1, 11].

Defina esta operación. ¿Cuál es la menor complejidad que se puede obtener para esta op-
eración? ¿Cuál o cuáles implementaciones de listas se podrían usar para obtener dicha complejidad? Explique.

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

como itarariamos con
min element o max element?

A

si es un vector
vector vec1;
vector<>:: iterator it = max_element(vec1.begin(), vec1.end());
*it = max(

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

en que momento se usa min element o max element?

A

Las funciones min_element y max_element permiten obtener el elemento
m ́as peque ̃no y m ́as grande de un rango de elementos en un contenedor.
X La b ́usqueda se hace a trav ́es de iteradores que apuntan a la posici ́on
inicial y a la posici ́on final de la secuencia en la cual se desea buscar.
X Por defecto, se utilizan los operadores < y >.

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

¿Qué ofrece la biblioteca STL de C++ en términos de implementaciones de estructuras de datos y funciones generales?

A

proporciona implementaciones de estructuras de datos y funciones generales que pueden ser parametrizadas con diferentes tipos de datos. Esto significa que las estructuras de datos y funciones en la STL están diseñadas de manera que puedan trabajar con diversos tipos de datos, utilizando plantillas (templates) para la parametrización.

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

¿Cómo utiliza la STL el paradigma de Programación Orientada a Objetos (POO) en sus funciones y estructuras, específicamente en relación con contenedores?

A

utiliza principalmente conceptos como herencia y polimorfismo en relación con contenedores

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

¿Cuáles son los tres componentes principales de la STL de C++ según su diseño general?

A

Contenedores: Proporcionan implementaciones de estructuras de datos como vectores, listas, conjuntos, mapas, pilas, colas, etc., que pueden almacenar y gestionar colecciones de elementos.
Algoritmos: Ofrece una amplia gama de algoritmos genéricos (por ejemplo, clasificación, búsqueda, manipulación de datos) que pueden trabajar con diferentes tipos de contenedores.
Iteradores: Son utilizados para acceder y manipular secuencialmente elementos en contenedores. Los iteradores proporcionan una abstracción para recorrer y operar sobre los elementos de un contenedor de manera genérica y eficiente.

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

¿Qué tipo de funciones están diseñadas para operar sobre rangos de elementos que forman parte de contenedores en la biblioteca STL en la bibliotecca algorithm?

A

Respuesta: Las funciones diseñadas para operar sobre rangos de elementos en contenedores incluyen algoritmos como algoritmos de ordenamiento, algoritmos de búsqueda, algoritmos útiles sobre arreglos y otros algoritmos misceláneos.

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

¿Qué función cumplen los iteradores en la biblioteca STL de C++?

A

Respuesta: Los iteradores en la biblioteca STL permiten recorrer secuencias de valores en contenedores de manera transparente y eficiente.

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

¿Por qué los iteradores son una característica clave que favorece la generalidad de la STL?

A

Respuesta: Los iteradores permiten operar de manera uniforme sobre elementos almacenados en contenedores, lo que facilita la implementación de algoritmos genéricos que pueden funcionar con diferentes tipos de contenedores.

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

¿Cómo se define un iterador en el contexto de la biblioteca STL?

A

Respuesta: Un iterador en la STL es un objeto que permite recorrer y acceder a los elementos de una colección (contenedor) en C++. Proporciona una abstracción para trabajar con elementos almacenados en diferentes tipos de contenedores, como vectores, listas, conjuntos, mapas, etc.

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

¿en qué momento sería útil implementar la función find de la STL de C++?

A

sería útil implementarla cuando necesitamos buscar la presencia de un elemento específico dentro de un contenedor, como un vector, una lista o cualquier otra secuencia de datos. Esta función es especialmente útil cuando queremos determinar si un elemento está presente en un contenedor y, en caso afirmativo, obtener su posición o realizar alguna acción basada en su presencia o ausencia.

17
Q

como se itera con find?

A

vector<int>v;
vector<int>::iterator it = find(v.begin(), v.end(), valor);
if (it != v.end()) {
pos = it - v.begin();
} else {
}</int></int>

18
Q

¿Qué es una clase en el contexto de la Programación Orientada a Objetos (POO) y cuál es su propósito principal?

A

Una clase en POO es una plantilla para crear objetos que encapsula datos (atributos) y comportamientos (métodos) relacionados. Su propósito principal es definir un nuevo tipo de datos que puede ser utilizado para crear instancias (objetos) con características y comportamientos específicos.

19
Q

Explica el concepto de encapsulamiento en POO. ¿Por qué es importante y cómo se logra en C++?

A

Respuesta:
El encapsulamiento es el principio de ocultar los detalles internos de una clase y exponer solo la interfaz necesaria para interactuar con ella. Esto se logra en C++ utilizando modificadores de acceso (public, private, protected) para controlar la visibilidad de los miembros de la clase. Los datos privados son inaccesibles desde fuera de la clase, lo que promueve la seguridad y modularidad del código.

20
Q

Diferencia entre un método y un atributo en una clase. Proporciona ejemplos concretos de cada uno.

A

Un atributo (o miembro de datos) es una variable que almacena datos asociados con un objeto. Un método (o función miembro) es una función que define el comportamiento de un objeto y puede acceder y manipular los atributos del objeto.
class Persona {
private:
string nombre; // Atributo

public:
// Método para establecer el nombre
void setNombre(string n) {
nombre = n;
}

// Método para obtener el nombre
string getNombre() const {
    return nombre;
} };
21
Q

Explica el concepto de abstracción en el contexto de la POO. ¿Por qué es útil y cómo se implementa en C++?

A

La abstracción es el proceso de identificar las características esenciales de un objeto y ocultar los detalles innecesarios. En POO, una clase representa una abstracción de un concepto del mundo real, permitiendo modelar objetos de manera simplificada y eficiente. En C++, la abstracción se logra mediante la definición de clases que encapsulan datos y comportamientos relevantes para un cierto contexto, ocultando los detalles de implementación interna.

22
Q

¿Por qué una lista enlazada es eficiente para realizar inserciones y eliminaciones en comparación con un arreglo estático?

A

Una lista enlazada utiliza nodos que están dispersos en la memoria, cada uno de los cuales contiene un puntero al siguiente nodo en la secuencia. Para insertar o eliminar un elemento en una lista enlazada, solo se requiere cambiar los punteros en los nodos afectados, sin necesidad de reorganizar toda la estructura de datos. En cambio, en un arreglo estático, las inserciones y eliminaciones pueden requerir mover muchos elementos para hacer espacio o compactar la estructura, lo cual es menos eficiente en términos de tiempo.

23
Q

¿Cuál es la diferencia clave entre una lista enlazada simple y una lista enlazada doble en términos de accesibilidad a los nodos?

A

En una lista enlazada simple, cada nodo tiene un puntero que apunta al siguiente nodo en la secuencia, permitiendo un recorrido unidireccional desde el principio al final de la lista. En contraste, una lista enlazada doble tiene nodos que contienen dos punteros: uno que apunta al nodo siguiente y otro que apunta al nodo anterior. Esto permite recorrer la lista en ambas direcciones (adelante y atrás), lo cual ofrece mayor flexibilidad en términos de acceso y manipulación de los nodos.

24
Q

¿Cuál es la complejidad temporal de búsqueda en una lista enlazada simple? Explique su respuesta.

A

La complejidad temporal de búsqueda en una lista enlazada simple es O(n), donde “n” es el número de nodos en la lista. Esto se debe a que en una lista enlazada simple, para buscar un elemento específico, se debe recorrer secuencialmente la lista desde el inicio hasta el nodo deseado. En el peor caso, la búsqueda puede requerir recorrer todos los nodos si el elemento buscado es el último o no está presente en la lista, lo cual implica una complejidad lineal en función del tamaño de la lista.

25
Q

¿Cómo se elimina un nodo específico de una lista enlazada? Explique el proceso paso a paso.

A

Para eliminar un nodo específico de una lista enlazada, se deben seguir los siguientes pasos:

Recorrer la lista para encontrar el nodo que se desea eliminar, manteniendo un puntero al nodo actual y otro al nodo anterior para poder ajustar los enlaces.
Una vez encontrado el nodo a eliminar, ajustar el puntero del nodo anterior para que apunte al nodo siguiente del nodo a eliminar.
Liberar la memoria ocupada por el nodo a eliminar.
Este proceso garantiza que la lista enlazada mantenga su integridad estructural después de la eliminación del nodo deseado.

26
Q

cuando se sobrecargan operadores?

A