Предположим, мы реализуем стек с использованием динамически распределенного массива. Если массив заполняется, мы имеем , столкнувшись с дилеммой. Из следующих вариантов выберите тот, который наилучшим образом описывает нашу стратегию обработки заполненного массива .Стек, реализованный с помощью динамического массива
(а) Мы объявляем новый массив, вдвое большой, как оригинал, и скопировать данные в новое пространство для общей стоимости O (N), к последовательности из п выталкивает.
(б) объявить еще один массив и сохранить дорожки, какой из двух (или более) массивов содержат текущую вершину стека в частном члена стека класса. Это стоит нам O (1) за толчок.
(с) для некоторого фиксированного к, мы создаем новый массив размера п + 2^к и копировать данные в новое пространство для средней стоимости O (1) на нажимной операции.
(г) Мы избегаем реализации стека с использованием динамически выделенный массив, , потому что это неэффективно, чтобы иметь в перераспределить память.
(e) Ни один из этих ответов не является разумным ответом .
Я уверен, что правильный ответ есть, но я не понимаю, почему это было бы лучше всего над другими? Другие практичны? Кажется, они мне подходят. Например, c
почти то же самое, что и `a, no? Почему удваивается более выгодно, а затем увеличивается на постоянную сумму? Как насчет других вариантов - почему они не работают?
Почему удвоение выгоднее: http://stackoverflow.com/questions/5232198/why-does-an-stl-vectors-capacity-grow-exponential/5232342#5232342 – Cubbi
uh ... homeowrk? Возьмите домашний тест? – Alex
@Alex - домашняя работа разрешена, но манера ответа различна (по крайней мере для меня). – tvanfosson