论坛首页 Java企业应用论坛

今天做的一道面试题

浏览 14339 次
精华帖 (1) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-09-10   最后修改:2011-09-19
session closed
   发表时间:2011-09-10  
貌似java有changeable接口,里面有undo和redo方法
2 请登录后投票
   发表时间:2011-09-10  
对了,这个是单链表还是双联表???
0 请登录后投票
   发表时间:2011-09-10  
ratzip 写道
对了,这个是单链表还是双联表???


没说。
不过我猜想要自己实现。。。。
0 请登录后投票
   发表时间:2011-09-11  
undo和redo是一起的吧,构造操作栈,undo操作是进栈,redo操作是出栈,每个操作是一个command,可以参考command模式;不过如果只允许用一个数据链表,不允许再构建操作栈的话就不知道怎么搞了,关于undo和redo,要记录每次的操作,觉得还是比较困难的
0 请登录后投票
   发表时间:2011-09-11  
喜羊羊与灰太狼 写道
undo和redo是一起的吧,构造操作栈,undo操作是进栈,redo操作是出栈,每个操作是一个command,可以参考command模式;不过如果只允许用一个数据链表,不允许再构建操作栈的话就不知道怎么搞了,关于undo和redo,要记录每次的操作,觉得还是比较困难的

说错了,应该是do进D栈,undo出栈,放入另外一个U栈,redo是从另外一个U栈出栈,然后放入D栈
0 请登录后投票
   发表时间:2011-09-11  
这个链表只记录操作就可以了
设置一个queue,然后不管什么操作都是进队列,包括Undo和redo,然后要获得链表的时候就将QUEUE的元素全部出队,一次执行一遍,这样就能得到这个链表的
0 请登录后投票
   发表时间:2011-09-11  
备忘录模式可以吗
0 请登录后投票
   发表时间:2011-09-11  
我总结一下。把每次增删改的操作分割成多个command存入操作栈中,然后把操作栈存入历史队列,需要使用undo和redo时取队列入口的操作栈,然后undo使用出栈操作,redo时先出栈然后再入栈。大概就是这个意思。
0 请登录后投票
   发表时间:2011-09-11  
luzhecheng 写道
我总结一下。把每次增删改的操作分割成多个command存入操作栈中,然后把操作栈存入历史队列,需要使用undo和redo时取队列入口的操作栈,然后undo使用出栈操作,redo时先出栈然后再入栈。大概就是这个意思。



按照一般规则来说是这样的,例如:
Insert、Insert、Delete、Modify、UNDO、REDO、INSERT、DELETE、UNDO那么就相当于操作Insert、Insert、Delete、Modify、Insert。

但是如果考虑得更复杂点呢,我发现其实REDO是需要基于UNDO的,即如果没有UNDO操作,貌似是不能REDO的,我记得office是这样的。例如你没有撤销操作,那么REDO就不能执行。

再一个,如果REDO后,实际上是可以再UNDO的,再UNDO后,又是可以再REDO的。

具体来说,难点在于用怎样的一种方式,将UNDO和REDO栈维护起来最好,即在效率和存储方面都比较客观。

看哪位高手可给出具体实现。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics