COMPARTE ESTE ARTÍCULO

📝 Introducción

En esta entrada aprenderás los fundamentos mínimos de C++ que necesitas para resolver una colección de ejercicios clásicos de estructuras de datos y algoritmos. Cada sección incluye:

  1. Conceptos teóricos esenciales.
  2. Código completo y funcional en C++-17.
  3. Explicaciones paso a paso para que entiendas qué hace cada línea y por qué.

💡 Todos los ejemplos usan las clases vector_t, matrix_t, dll_t, sll_t, stack_l_t y queue_l_t que normalmente acompañan a la asignatura «Estructuras de Datos». Si ya las tienes implementadas basta con copiar-pegar los métodos nuevos; si no, puedes sustituirlas por std::vector, std::list, etc. mientras practicas.


🔧 1. Fundamentos de C++ que vas a usar

Tema¿Para qué lo necesitaremos?Píldora rápida
Plantillas (templates)Para que las listas, pilas, matrices, etc. funcionen con cualquier tipo T.template<typename T> class dll_t { … };
Clases & métodosEncapsulan datos (head_, tail_, etc.) y operaciones (extract, reverse, …).Declaras en el .hpp, implementas en el .tpp o justo debajo con inline.
Punteros & referenciaManipular nodos y evitar copias caras.dll_node_t<T>* p; T& operator()(int i,int j);
RecursiónPara backtracking y recorridos implícitos.Una función que se llama a sí misma con un caso base.
Aserciones (assert)Verifican precondiciones en tiempo de ejecución.assert(b > 1 && b < 10);
Complejidad Big-OEficiencia que exige el enunciado.Evita bucles anidados innecesarios y copias costosas.

📌 2. Ejercicio 1 – dll_t<T>::extract(…) (1 punto)

Objetivo

Extraer cualquier nodo de una lista doblemente enlazada controlando los tres casos extremos:

  • Extraer en medio.
  • Extraer la cabeza (head_).
  • Extraer la cola (tail_).

Implementación

Complejidad: O(1).


📌 3. Ejercicio 2 – Conversión de base (2 puntos)

Firma

Idea

  1. Dividir n sucesivamente entre b.
  2. Guardar cada resto.
  3. Invertir el orden de los restos para obtener la representación.

Código

Complejidad: O(logb n).


📌 4. Ejercicio 3 – Shunting-Yard (2 puntos)

Firma

Pasos clave

  1. Recorrer la expresión carácter a carácter.
  2. Usar una pila para operadores y una cola para la salida.
  3. Desencolar operadores con mayor o igual precedencia antes de apilar el nuevo.

Código

Complejidad: O(n).


📌 5. Ejercicio 4 – Partición equitativa (Backtracking, 2 puntos)

Firma

Algoritmo recursivo

Complejidad: O(2ⁿ) en el peor caso, inevitable al enumerar TODAS las particiones.


📌 6. Ejercicio 5 – Matrices simétricas (2 puntos)

(a) Versión iterativa — O(m²)

(b) Versión recursiva — O(m²) con pila implícita


📌 7. Ejercicio 6 – Transponer in-place (1 punto)

Recorremos solo la mitad superior (j > i) y evitamos matrices auxiliares.


📌 8. Ejercicio extra – sll_t<int>::intersect(…) (1 punto)


📌 9. Ejercicio extra – dll_t<T>::reverse() (1 punto)


📌 10. Ejercicio extra – Producto escalar recursivo (2.5 puntos)


▶️ Cómo probar cada ejercicio

  1. Crea un proyecto con CMake o tu IDE favorito.
  2. Copia las clases base (vector_t, matrix_t, dll_t, etc.).
  3. Añade solo los métodos mostrados arriba.
  4. Añade tests rápidos en main() para cada método con assert.

🎯 Conclusión

Con estas implementaciones ya tienes un kit completo de soluciones y la explicación conceptual que necesitas para:

  • Profundizar en plantillas y punteros.
  • Practicar recursión y backtracking.
  • Medir la eficiencia de tus algoritmos.



¿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

INSTAGRAM

TIKTOK


 …Y PRONTO MUCHAS MÁS

AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.

Contenido restringido

Acceso de usuarios existentes
   
Registro de un nuevo usuario
*Campo necesario

Categories:

Tags:

Comments are closed

Estado de acceso
ESTADO DE ACCESO
TRADUCTORES
COMPARTENOS
error: CONTENIDO PROTEGIDO