撤销链表类的函数



嘿,我是C++的初学者,我想在C++中的linkedList类中添加一个Undo函数,该函数会反转列表上的最后一个操作,例如(appendinsertAtdeleteAtclear(。关于撤消这些命令的最佳方法是什么,有什么想法吗?

我可以想出两种简单的方法来实现"撤消"的魔力:将更改保存在队列中,直到你真的必须推送它们,或者将对你所做的每个更改的反向操作推送到撤消队列中。

第一个看起来是这样的:

User Action  | Action Queue      | actual list
---------------------------------------
nothing    |  empty            |  {}
push 5     |  {push 5}         |  {}
push 2     |  {push 2, push 5} |  {}
print list |  {}               |  {5, 2}

只有当用户执行了一个需要渗透更改的操作(如打印或获取(时,您才能真正进行更改。然后撤消操作将只是操作队列中的一个弹出操作。

另一种选择是存储一个反向队列:

User Action  | Reverse Queue       | actual list
---------------------------------------
nothing    |  empty              |  {}
push 5     |  {pop}              |  {5}
push 2     |  {pop, pop}         |  {5, 2}
pop        |  {push 2, pop, pop} |  {5}
undo       |  {pop, pop}         |  {5, 2}

在这里,用户所做的任何事情都会立即渗透,并将操作的反向推送到反向队列中。然后,撤消操作将弹出反向队列并执行操作。

虽然第一个更容易实现,但这意味着在"推动更改"之后,您将失去撤消的能力

相关内容

  • 没有找到相关文章

最新更新