请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

编辑器的输入只是简单入栈,编辑器的删除和撤销删除怎么做?

编辑器的输入是入栈,编辑器的删除和撤销删除怎么做?
我的想法是,用一个新的栈(名为“删除栈”)来保存删除掉的元素。撤销删除时,从“删除栈”中出栈被删除的元素,再入栈到“输入栈”中。

但是,现在还有一个问题。如何判断本次的撤销是对输入的撤销,还是对删除操作的撤销呢?
我的办法是,在删除的时候,对“输入栈”也入栈一个标记删除动作的item。如果peek输入栈,得到的是记录删除动作的item,则从“删除栈”出栈栈顶元素,并入栈到“输入栈”;如果得到的是普通的输入字符,则直接出栈。

再涉及到redo,可能就更复杂了。需要一个栈来存储undo的操作,并且区分是输入入还是删除。

不知道真正的编辑器,是不是这么设计的呢?

正在回答

1回答

liuyubobobo 2019-02-17 16:59:16

不需要两个栈,一个栈就可以。栈中所存储的不仅仅可以是一个数或者一个字符等等基本元素,也可以是复杂的结构体或者类对象。这个结构体或者类对象可以表示一个“操作”,其中可以记录这个操作是什么类型(添加还是删除),具体的操作内容(添加了什么或者删除了什么),这样,在撤销的时候,都是选择栈顶元素的内容,根据所存储的操作进行恢复即可:)


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 new_chapter #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-02-17 17:06:30
  • 提问者 new_chapter #2
    那么redo是应该需要额外的栈的吧?
    回复 有任何疑惑可以回复我~ 2019-02-17 17:07:07
  • liuyubobobo 回复 提问者 new_chapter #3
    是的哦,再设立一个栈,存储被撤销的操作就好啦:)
    回复 有任何疑惑可以回复我~ 2019-02-17 17:10:16
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信