编辑器的输入只是简单入栈,编辑器的删除和撤销删除怎么做?
来源:3-1 栈和栈的应用:撤销操作和系统栈
new_chapter
2019-02-17
编辑器的输入是入栈,编辑器的删除和撤销删除怎么做?
我的想法是,用一个新的栈(名为“删除栈”)来保存删除掉的元素。撤销删除时,从“删除栈”中出栈被删除的元素,再入栈到“输入栈”中。
但是,现在还有一个问题。如何判断本次的撤销是对输入的撤销,还是对删除操作的撤销呢?
我的办法是,在删除的时候,对“输入栈”也入栈一个标记删除动作的item。如果peek输入栈,得到的是记录删除动作的item,则从“删除栈”出栈栈顶元素,并入栈到“输入栈”;如果得到的是普通的输入字符,则直接出栈。
再涉及到redo,可能就更复杂了。需要一个栈来存储undo的操作,并且区分是输入入还是删除。
不知道真正的编辑器,是不是这么设计的呢?
写回答
1回答
-
不需要两个栈,一个栈就可以。栈中所存储的不仅仅可以是一个数或者一个字符等等基本元素,也可以是复杂的结构体或者类对象。这个结构体或者类对象可以表示一个“操作”,其中可以记录这个操作是什么类型(添加还是删除),具体的操作内容(添加了什么或者删除了什么),这样,在撤销的时候,都是选择栈顶元素的内容,根据所存储的操作进行恢复即可:)
继续加油!:)
042019-10-10
相似问题