锁定老帖子 主题:今天做的一道面试题
精华帖 (1) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-09-10
最后修改:2011-09-19
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-09-10
貌似java有changeable接口,里面有undo和redo方法
|
|
返回顶楼 | |
发表时间:2011-09-10
对了,这个是单链表还是双联表???
|
|
返回顶楼 | |
发表时间:2011-09-10
ratzip 写道 对了,这个是单链表还是双联表???
没说。 不过我猜想要自己实现。。。。 |
|
返回顶楼 | |
发表时间:2011-09-11
undo和redo是一起的吧,构造操作栈,undo操作是进栈,redo操作是出栈,每个操作是一个command,可以参考command模式;不过如果只允许用一个数据链表,不允许再构建操作栈的话就不知道怎么搞了,关于undo和redo,要记录每次的操作,觉得还是比较困难的
|
|
返回顶楼 | |
发表时间:2011-09-11
喜羊羊与灰太狼 写道 undo和redo是一起的吧,构造操作栈,undo操作是进栈,redo操作是出栈,每个操作是一个command,可以参考command模式;不过如果只允许用一个数据链表,不允许再构建操作栈的话就不知道怎么搞了,关于undo和redo,要记录每次的操作,觉得还是比较困难的
说错了,应该是do进D栈,undo出栈,放入另外一个U栈,redo是从另外一个U栈出栈,然后放入D栈 |
|
返回顶楼 | |
发表时间:2011-09-11
这个链表只记录操作就可以了
设置一个queue,然后不管什么操作都是进队列,包括Undo和redo,然后要获得链表的时候就将QUEUE的元素全部出队,一次执行一遍,这样就能得到这个链表的 |
|
返回顶楼 | |
发表时间:2011-09-11
备忘录模式可以吗
|
|
返回顶楼 | |
发表时间:2011-09-11
我总结一下。把每次增删改的操作分割成多个command存入操作栈中,然后把操作栈存入历史队列,需要使用undo和redo时取队列入口的操作栈,然后undo使用出栈操作,redo时先出栈然后再入栈。大概就是这个意思。
|
|
返回顶楼 | |
发表时间: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栈维护起来最好,即在效率和存储方面都比较客观。 看哪位高手可给出具体实现。 |
|
返回顶楼 | |