15. История экранов приложения
Стек 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. Для отмены сохраняют данные предыдущего состояния. Обычный перебор стека идёт от последнего добавленного элемента к первому.
Для этой задачи
- Главный экран. Первую запись истории сохраняйте: возврат допустим только при Count > 1.
Приложение начинается на главном экране home. Команда OPEN открывает новый экран поверх текущего, даже если имя совпадает с текущим. BACK закрывает только последний открытый экран. Начальный экран закрывать нельзя: на нём BACK ничего не меняет. После каждой команды нужно показать имя текущего экрана.
Команды
| Команда | Действие и ответ |
OPEN name | Добавить в историю новый экран с именем name. |
BACK | Вернуться к предыдущей записи истории, если она есть. |
CURRENT | Не менять историю; показать текущий экран. |
Входные данные
В первой строке записано q. Далее идут q команд, по одной в строке.
Выходные данные
После каждой команды, включая CURRENT, выведите имя текущего экрана.
Не выводите приглашения к вводу и пояснения. Служебные слова в ответах пишите в указанном регистре.
Ограничения
1 ≤ q ≤ 100000; имя экрана содержит 1–20 строчных латинских букв. Имя home разрешено и в OPEN: такой экран является обычной новой записью истории.
| № | Входные данные | Выходные данные |
|
1
|
7
CURRENT
OPEN catalog
OPEN product
BACK
BACK
BACK
CURRENT
|
home
catalog
product
catalog
home
home
home
|
|
2
|
5
OPEN catalog
OPEN home
BACK
BACK
BACK
|
catalog
home
catalog
home
home
|
Напишите программу
Auto