Tracks
/
C++
C++
/
Ejercicios
/
Lista enlazada
Lista enlazada

Lista enlazada

Intermedia

Introducción

Estás trabajando en un proyecto para desarrollar un sistema de programación de trenes para una red ferroviaria muy transitada.

Te han pedido que desarrolles un prototipo para las rutas de trenes del sistema de programación. Cada ruta consiste en una secuencia de estaciones de tren en las que se detiene un tren en particular.

Instrucciones

Tu equipo ha decidido usar una lista doblemente enlazada para representar cada ruta de tren en el horario. Cada estación a lo largo de la ruta del tren se representará con un nodo en la lista enlazada.

No necesitas preocuparte por los horarios de llegada y salida en las estaciones. Cada estación simplemente se representará con un número.

Las rutas se pueden extender agregando estaciones al principio o al final de una ruta. También se pueden acortar quitando estaciones del principio o del final de una ruta.

A veces se cierra una estación y, en ese caso, hay que quitarla de la ruta, aunque no esté ni al principio ni al final de esta.

El tamaño de una ruta no se mide por la distancia que recorre el tren, sino por la cantidad de estaciones en las que se detiene.

Note

La lista enlazada es una estructura de datos fundamental en las ciencias de la computación, y a menudo se usa para implementar otras estructuras de datos. Como su nombre lo indica, es una lista de nodos que están enlazados entre sí. Es una lista de «nodos», donde cada nodo se enlaza con su vecino o sus vecinos. En una lista simplemente enlazada, cada nodo se enlaza solo con el nodo que lo sigue. En una lista doblemente enlazada, cada nodo se enlaza tanto con el nodo que está antes como con el que está después.

Si quieres profundizar en las listas enlazadas, echa un vistazo a este artículo, que las explica con dibujos muy claros.

Cómo está estructurado este ejercicio en el track de C++

Aunque las listas enlazadas se pueden implementar de muchas maneras con distintas estructuras de datos subyacentes, aquí te pedimos que implementes tu lista enlazada de forma orientada a objetos.

En el archivo linked_list_test.cpp, verás que se llama a una clase List con plantillas. Se espera que escribas esta clase con las siguientes funciones miembro:

  • push agrega un elemento al final de la lista,
  • pop elimina y devuelve el último elemento de la lista,
  • shift elimina y devuelve el primer elemento de la lista,
  • unshift agrega un elemento al inicio de la lista, y
  • count devuelve el número total de elementos de la lista actual.

Por último, nos gustaría que implementaras erase además de las funciones miembro descritas arriba. erase recibirá un argumento, que es el valor que se debe eliminar de la lista enlazada. Si el valor aparece más de una vez, solo se debe eliminar la primera aparición. Debe devolver si se eliminó un elemento o no.

Aunque no se prueba, quizás quieras lanzar una excepción si se llama a pop y shift en una List vacía.


Fuente

Tema clásico de las ciencias de la computación
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
C++ Exercism

¿Todo listo para empezar Lista enlazada?

Regístrate en Exercism para aprender y dominar C++ con 19 conceptos100 ejercicios y mentoría humana real, todo gratis.