我想实现UNDO和REDO选项(正如我们在MS word等中看到的那样).你能为我建议一个数据结构,我该如何实现呢?
它不是数据结构,而是设计模式.你正在寻找命令模式.
标准是将Command对象保留在堆栈中以支持多级撤消.为了支持重做,第二个堆栈会保留你已经完成的所有命令.因此,当您弹出撤消堆栈以撤消命令时,您可以将弹出的相同命令推送到重做堆栈.重做命令时,您可以反向执行相同的操作.弹出重做堆栈并将弹出的命令推回到撤消堆栈中.
实际上,这个功能的标准模式(Gang of Four,甚至)是Memento.
此外,虽然大多数程序使用Undo/Redo堆栈,但某些文本编辑器的功能优先于Undo/Redo 树,因此如果它们撤消一些命令,尝试新命令并改变主意,它们就不会丢失整个历史记录.