Отменить функцию в классе Linked List

Эй, я новичок в C ++, и я хочу добавить Undo функция к linkedList класс в C ++, функция отменяет последнюю операцию, выполненную в списке, такую ​​как (append , insertAt , deleteAt , clear ) Есть идеи о том, как лучше всего отменить эти команды?

-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}

Здесь все, что пользователь делает, немедленно перколируется, и вы помещаете реверс действия в очередь реверса. Затем отменить нужно выскочить из очереди реверса и выполнить действие.

Хотя первый способ гораздо проще реализовать, это означает, что вы теряете возможность отмены после «внесения изменений».

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]