(撤消-重做)的最佳数据结构是什么?



什么是Undo/Redo的最佳数据结构, (ctrl+zctrl+y) ?没过几天,我们的老师说堆栈最适合撤消,但我正在考虑双链表..

有没有其他数据结构使我们的目的质量更好?或者这两个中的一个引导我们的目的,其中哪一个? PS:如果有更好的数据结构,请使用(oop)-java首选-并感谢您的帮助进行解释

将所有操作放在一个堆栈中以进行多级撤消。 在重做的情况下,创建另一个堆栈.此堆栈将保留您 undone.so 的所有命令 当您执行撤消命令时,您会弹出撤消堆栈并将操作推送到重做堆栈中。你在重做中做同样的事情。当你弹出一个重做动作时,把它放到撤消堆栈中

撤消/重做原则上是基于堆栈(先进后出)的操作,因此您需要某种基于堆栈的体系结构来存储操作。

话虽如此,堆栈行为的方式可能会因应用程序的其他要求而异。通常的方法是让堆栈由数组支持-您保留最后一个元素的当前索引,并在该索引处添加(删除)新填充元素并相应地增加(减少) ot

但是你也可以用不同的方式实现这种先进后出的行为,例如双链表 - 你将保留对列表最后一个元素的引用,并在末尾添加新元素(并更新此引用)或删除最后一个元素(并更新对新的最后一个元素的引用)。给自己类似堆栈的行为

编辑:

对于重做,您保留单独的堆栈,每当撤消命令时都会在其中推送命令,以便以后可以使用它(从重做堆栈弹出,执行,推送以撤消堆栈) 当您推送新的(例如不是来自重做堆栈)命令以撤消堆栈时,清除重做堆栈很重要

最新更新