16. Откат изменения значения
Стек Stack<T>
Что хранит. Хранит элементы как стопку. Первым извлекается последний добавленный элемент: LIFO.
Для чего используют. Подходит для возврата к предыдущему экрану, отмены изменений и хранения истории состояний.
Основные операции
| Запись на C# | Назначение |
s.Push(x) | Положить x на вершину. |
s.Pop() | Вернуть и удалить верхний элемент. |
s.Peek() | Прочитать вершину без удаления. |
s.Count | Число элементов. |
s.Clear() | Удалить все элементы. |
s.ToArray() | Получить массив от вершины к основанию стека. |
Пример
Для примера нужны using System; и using System.Collections.Generic;. Код выполняется внутри Main.
Stack<int> history = new Stack<int>();
history.Push(10);
history.Push(20);
Console.WriteLine(history.Peek());
Console.WriteLine(history.Pop());
Console.WriteLine(history.Peek());
Вывод:
20
20
10
Важно. Перед Peek и Pop проверьте Count > 0. Для отмены сохраняют данные предыдущего состояния. Обычный перебор стека идёт от последнего добавленного элемента к первому.
Для этой задачи
- Отмена. Перед новым присваиванием сохраните прежнее значение через Push.
В редакторе есть числовое поле с начальным значением x. Каждая команда SET сохраняет прежнее значение в историю и устанавливает новое. UNDO восстанавливает последнее сохранённое значение и удаляет соответствующую запись истории. Если история пуста, значение не меняется. GET только читает текущее значение. Даже SET с тем же значением создаёт запись истории.
Входные данные
Первая строка содержит q и начальное значение x. Далее идут q команд: SET value, UNDO или GET.
Выходные данные
После каждой команды выведите текущее значение поля.
Не выводите приглашения к вводу и пояснения. Служебные слова в ответах пишите в указанном регистре.
Ограничения
1 ≤ q ≤ 100000; начальное значение и все value — целые числа от −10⁹ до 10⁹.
| № | Входные данные | Выходные данные |
|
1
|
7 10
SET 20
SET 30
UNDO
GET
UNDO
UNDO
GET
|
20
30
20
20
10
10
10
|
|
2
|
6 5
SET 7
SET 7
UNDO
SET 9
UNDO
UNDO
|
7
7
7
9
7
5
|
Напишите программу
Auto