O-нотация классифицирует алгоритм по степени сложности (в смысле, например, времени выполнения или использования памяти) в зависимости от размера проблемы.Таким образом, O (1) означает, что независимо от того, насколько велика проблема, алгоритм не усложняется, независимо от того, насколько велика эта постоянная стоимость.
Давайте рассмотрим некоторые части вашей программы.
Удалить
Это имеет сложность во время выполнения O (1) , потому что независимо от размера стека книг, он всегда почти одинаковыйопераций, которые вы делаете для удаления верхней части стопки книг.Единственная разница между 0, 1 и 2 книгами, но если вы увеличиваете стек до бесконечности, количество операций не увеличивается, и это то, что имеет значение.
Add
Здесь сложно измерить.Поскольку этот метод добавляет только 1 книгу за раз, это O (1) , потому что независимо от того, сколько книг уже есть (это единственный переменный размер), вам всегда нужно одинаковое количество операций.Было бы более интересно, если бы вы позволили добавлять несколько книг одновременно.
Дисплей
Таким образом, дисплей распечатывает все книги в стопке.Если вы увеличиваете количество книг, число операций также возникает.Теперь вопрос в том, каким образом?В этом случае удвоение количества книг удваивает количество инструкций.Это линейный рост, поэтому класс сложности равен O (n) .
. Это может быть полезно для просмотра количества циклов.Один цикл по размеру проблемы часто означает O (n).Если у вас есть два вложенных цикла (по размеру задачи), у вас часто есть O (n²) и так далее.
На ваш вопрос, что такое бесконечный цикл в вашей основной функции, хорошо, это зависит от того, что вы определяете как размер вашей проблемы, я не знаю, имеет ли смысл здесь измерять его.
Если вы определите общее количество действий пользователя как размер проблемы, это усложняется.Если мы выпустим часть отображения и разрешим только добавление и удаление, то это O (n), потому что все будет константой (поскольку add и delete являются O (1), а другие вещи являются независимыми инструкциями, такими как cout), и они происходят вцикл, основанный на размере задачи n (количество действий пользователя).Если принять во внимание отображение, это не так просто, потому что отображение имеет сложность O (m) (m = количество книг), и это сильно зависит от фактического пользовательского ввода, который был дан ранее.Я не знаю, какова будет сложность там.