什么是(undo-redo)最好的数据结构?

时间:2018-03-06 18:01:13

标签: data-structures stack

Undo/Redo的最佳数据结构是什么,( ctrl + z ctrl + y )? 在几天之前,我们的老师说堆栈是最好的撤销,但我正在考虑双链表 ..

有没有其他数据结构可以达到更好的质量目的?或者其中一个引领我们的目的和其中一个? PS:如果有更好的数据结构,那么使用(oop)-java preferred-&谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

将所有操作放在堆栈中以进行多级撤消。并且在重做的情况下制作另一个stack.this堆栈将保留你撤消的所有命令。所以当你执行撤销命令时,你弹出撤销堆栈并将动作推入重做堆栈。你做同样的事情重做。当你弹出一个重做动作将其置于撤消堆栈

答案 1 :(得分:0)

Undo / Redo是基于堆栈(先进先出)操作的原则,因此您需要某种基于堆栈的架构来存储操作。

话虽如此,基于应用程序的其他要求,堆叠行为的方式可能会有所不同。通常的方法是让数组支持堆栈 - 保持最后一个元素的当前索引,然后在该索引处添加(删除)新的东西元素并相应地增加(减少)

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

修改

对于重做,你可以保留单独的堆栈,每当你撤消命令时都会按下它们,这样你以后就可以使用它了(从重做堆栈弹出,执行,推送到撤消堆栈) 当您将新的(例如,不是从重做堆栈)命令推送到撤消堆栈

时,清除重做堆栈非常重要