编辑器的输入是入栈,编辑器的删除和撤销删除怎么做?
我的想法是,用一个新的栈(名为“删除栈”)来保存删除掉的元素。撤销删除时,从“删除栈”中出栈被删除的元素,再入栈到“输入栈”中。
但是,现在还有一个问题。如何判断本次的撤销是对输入的撤销,还是对删除操作的撤销呢?
我的办法是,在删除的时候,对“输入栈”也入栈一个标记删除动作的item。如果peek输入栈,得到的是记录删除动作的item,则从“删除栈”出栈栈顶元素,并入栈到“输入栈”;如果得到的是普通的输入字符,则直接出栈。
再涉及到redo,可能就更复杂了。需要一个栈来存储undo的操作,并且区分是输入入还是删除。
不知道真正的编辑器,是不是这么设计的呢?