¿Cómo usar este post?
- Imprime o copia los enunciados y cubre las secciones de código-solución con la etiqueta de “spoiler” de tu editor de WordPress (o simplemente no las mires).
- Pon un cronómetro de 2 h 30 min e intenta resolverlo “a pelo”.
- Compara tu resultado con la solución oficial que encontrarás más abajo.
- Repite hasta que obtengas al menos 8/10 correctamente.
1️⃣ Enunciado del Simulacro
Bloque 1 – Listas Dobles (dll_t
)
- (1 pto) Implementa
template <typename T> void dll_t<T>::extract(dll_node_t<T>* nodo);
que elimine cualquier nodo de la lista (incluidos cabeza y cola) en O(1). - (1 pto) Implementa
template <typename T> void dll_t<T>::reverse();
que invierta la lista in-place, sin estructuras auxiliares.
Bloque 2 – Conversión de Bases
- (2 ptos) Desarrolla
vector_t<unsigned> to_base(unsigned n, unsigned short b);
que conviertan
(decimal) a su representación en baseb
(2 ≤ b ≤ 9).
Bloque 3 – Shunting-Yard
- (2 ptos) Convierte una expresión infija con
+ - * /
a postfija:queue_l_t<char> infixToPostfix(const vector_t<char>& expr);
Bloque 4 – Backtracking
- (2 ptos) Completa la función recursiva
void generate(int x[], int i, int sumA, int n, int totalSum, const int values[]);
que muestre todas las particiones del conjuntovalues[]
en dos subconjuntos de suma idéntica.
Bloque 5 – Matrices
- (0,5 + 1,5 ptos)
a) Versión iterativaes_simetrica
b) Versión recursivaes_simetrica_rec
- (1 pto) Implementa
void trasponer(matrix_t<int>& A);
que trasponga una matriz cuadrada in-place.
Bloque 6 – Extensión
- (2,5 ptos) Producto escalar recursivo de vector disperso:
double sparse_vector_t::scal_prod(const vector_t<double>& w, int i = 0);
- (1 pto) Intersección de dos listas simples sin repes:
template<> void sll_t<int>::intersect(sll_t<int>& A, sll_t<int>& B);
Hasta aquí el examen.
————— NO SIGAS LEYENDO si quieres hacerlo sin mirar —————
2️⃣ Soluciones oficiales
2.1 Listas Dobles

2.1.1 dll_t<T>::extract
Complejidad: O(1).
2.1.2 dll_t<T>::reverse

Memoria extra: O(1).
2.2 Conversión de Bases

Coste: O(log₍b₎ n).
2.3 Shunting-Yard

Coste: O(n).
2.4 Partición Equitativa (Backtracking)

Poda opcional: cortar ramas cuando sumA > totalSum/2
.
2.5 Matrices
2.5.1 Iterativa es_simetrica

2.5.2 Recursiva es_simetrica_rec
2.5.3 Trasposición in-place
2.6 Extra
2.6.1 Producto escalar (vector disperso × vector denso)
double sparse_vector_t::scal_prod(const vector_t<double>& w, int i)
{
assert(n_ == w.get_size()); // mismos tamaños
if (i == nz_) return 0.0; // caso base
return at(i).get_val() * w[ at(i).get_inx() ]
+ scal_prod(w, i+1);
}
2.6.2 Intersección de listas simples
template<>
void sll_t<int>::intersect(sll_t<int>& A, sll_t<int>& B)
{
clear(); // vacía lista destino
for (auto* p = A.get_head(); p; p = p->get_next())
if (B.search(p->get_data()))
push_front(new sll_node_t<int>(p->get_data()));
}
3️⃣ Script de autocorrección rápida
Agrega al final de tu proyecto:
int main()
{
// ----- extract + reverse -----
dll_t<int> L;
for (int k : {1,2,3,4}) L.push_back(new dll_node_t<int>(k));
L.extract(L.get_head()->get_next()); // elimina 2
L.reverse();
assert(L.get_head()->get_data()==4 && L.get_tail()->get_data()==1);
// ----- conversión de base -----
auto b8 = to_base(100,8);
assert(b8[0]==1 && b8[1]==4 && b8[2]==4);
// ----- infix → postfix -----
vector_t<char> e({'7','+','3','*','2','-','5','/','1'});
auto q = infixToPostfix(e);
std::string s; while(!q.empty()){s+=q.front();q.pop();}
assert(s=="732*+51/-");
std::cout<<"✓ Todos los tests pasan\n";
}
4️⃣ Consejos finales
- Compila siempre con
g++ -std=c++17 -Wall -Wextra -pedantic
. - Usa
assert
para documentar pre- y post-condiciones. - Si te atascas, pasa al ejercicio siguiente: cada punto cuenta.
- La eficiencia (Big-O) vale fácilmente medio punto por problema.
¡Listo! Con estas soluciones ya tienes un mapa completo de lo que suele caer y cómo abordarlo eficazmente.
Si detectas alguna mejora o error, déjalo en comentarios. ¡Buena suerte en tu examen! 🚀
¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.
¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos.

NUESTRAS ÚLTIMAS PUBLICACIONES
- CHECK Constraint en Oracle SQL: garantiza la calidad de tus datos paso a paso
- Simulacro #4 – Examen de C++ / Estructuras de Datos
- Simulacro #3 – Examen de C++ / Estructuras de Datos
- Simulacro #2 de Examen C++
- Simulacro de Examen de Estructuras de Datos en C++ (con Soluciones)Guía completa para repasar antes del parcial/final
- Fundamentos de C++ y Ejercicios Resueltos de Estructuras de Datos: Guía Paso a Paso
- Examen Avanzado-Moderado de Programación en C#
- Examen de Programación Intermedio: POO, Colecciones y Serialización
- Examen Avanzado de Fundamentos de Programación en C#
ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido
Comments are closed