【问题标题】:Undo function to the Linked List class [closed]撤消链接列表类的功能[关闭]
【发布时间】:2019-04-13 07:10:38
【问题描述】:

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

【问题讨论】:

标签: c++ linked-list stack undo


【解决方案1】:

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

第一个看起来像这样:

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}

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

虽然第一个更容易实现,但这意味着您在“推送更改”后无法撤消。

【讨论】:

    猜你喜欢
    • 2016-01-26
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2021-08-05
    • 2018-04-23
    • 2012-01-27
    相关资源
    最近更新 更多