¿Cómo podemos implementar las funciones de deshacer y rehacer en una cola de doble final?
Dado que la expectativa general es que:
- deshacemos las acciones en el orden inverso en que se realizaron, y
- rehacemos acciones que deshacemos también en el orden inverso,
La estructura de datos canónicos para almacenar el estado de deshacer y rehacer es una pila en lugar de una cola de doble extremo ( deque ). Por supuesto, debe usar pilas separadas para deshacer y rehacer información, y simplemente transferir elementos entre ellos, es decir:
- ¿Cuánto tiempo se necesita para leer Introducción a Algoritmos de TH Cormen, para un principiante?
- ¿Qué estructura de datos usaría para diseñar un programa de planificación de producción?
- ¿Qué patrones de diseño y algoritmos comunes necesito saber para el desarrollo de Android?
- ¿Qué es el algoritmo?
- ¿Cuál es la lógica de la búsqueda de Fibonacci?
- cada nueva acción que hagas se inserta en la pila de deshacer,
- cada deshacer saca un elemento de la pila de deshacer y lo empuja a la pila de rehacer,
- cada rehacer saca un elemento de la pila de rehacer y lo empuja a la pila de deshacer.
Dicho esto, puede usar fácilmente una deque para emular una pila, simplemente agregando y eliminando elementos del mismo extremo de la cola.
El uso de un deque para la pila de deshacer tiene la ventaja adicional de que puede elegir recortar la pila cuando se llena demasiado (por ejemplo, puede limitar las deshacer a las últimas 1,000 acciones). Recortar la pila solo significa eliminar elementos del extremo opuesto desde el que los inserta.