Skip to content

mnickw/StacksPractic

Repository files navigation

Практики «Limited Size Stack» и «Отмена»

Репозиторий содержит решения этой и этой задачи с ulearn.me. Задачи прошли код-ревью у преподавателя, за обе 50 баллов из 50. Все решения курса на максимальный балл также выложены в других репозиториях. Ветка unsolved содержит изначальный проект.

Конечное приложение - окно с возможностью добавлять/удалять записи и отменять добавление/удаление (сохраняется история).

Практика «Limited Size Stack»

В этой задаче вам нужно реализовать стек ограниченного размера. Этот стек работает как обычный стек, однако при превышении максимального размера удаляет самый глубокий элемент в стеке. Таким образом в стеке всегда будет ограниченное число элементов.

Вот пример работы такого стека с ограничением в 2 элемента:

// сначала стек пуст
stack.Push(10); // в стеке 10
stack.Push(20); // в стеке 10, 20
stack.Push(30); // в стеке 20, 30
stack.Push(40); // в стеке 30, 40
stack.Pop(); // возвращает 40, в стеке остаётся 30
stack.Pop(); // возвращает 30, стек после этого пуст

Операция Push должна иметь сложность O(1), то есть никак не зависеть от размера стека.

Реализуйте класс LimitedSizeStack.

Отладьте его реализацию с помощью тестов в классе LimitedSizeStack_should. Проверьте эффективность операции Push с помощью теста из класса LimitedSizeStack_PerformanceTest.

Практика «Отмена»

Если вы запустите проект на исполнение, то увидите окно приложения, в котором можно добавлять новые дела и удалять уже существующие. Однако кнопка "Отмена" пока не работает. Ваша задача — сделать так, чтобы эта кнопка отменяла последнее действие пользователя.

Изучите класс ListModel — в нём реализована логика работы кнопок в приложении.

Реализуйте методы Undo и CanUndo. Для этого нужно хранить историю последних limit действий удаления/добавления. Используйте для этого класс LimitedSizeStack из прошлой задачи.

  • Метод Undo отменяет последнее действие из истории.
  • Метод CanUndo возвращает true, если на данный момент история действий не пуста, то есть если вызов Undo будет корректным. Иначе метод должен вернуть false.

Проверить корректность своего решения можно на модульных тестах из класса ListModel_Should и ListModel_PerformanceTest.

Если хотите, можете воспользоваться классическим объектно-ориентированным шаблоном Команда. Однако для сдачи данной задачи, точно следовать этому шаблону необязательно.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages