Одна из возможных интерпретаций заключается в том, что решения должны использовать «статическую» базовую структуру фиксированного размера (например, массив), а не использовать динамическое растущее количество.Следовательно, каждый стек будет иметь предварительно назначенную максимальную емкость.Поэтому я ожидаю, что в операции push(...)
будет сгенерировано исключение, которое превысит емкость стека (точно так же, как операция pop()
выдаст пустой стек).
Примерстатическая реализация (хотя она позволяет устанавливать общую емкость) может выглядеть следующим образом.Здесь доступ всегда будет O (1), так как индекс используется напрямую, нет обхода структуры данных и перераспределения памяти.Обратите внимание, что код является примером, и не был проверен.Использование Generic может быть удалено, если рассматриваемый подход определяет конкретный тип стека (например, int или char).
public class AnotherStack<T>
{
private final T[] values;
private int loc = 0;
// must use the suppress, as we are using a raw Object array
// which is necessitated as cannot make a generic array
// See Effective Java
@SuppressWarnings("unchecked")
public AnotherStack(int size)
{
values = (T[])new Object[size];
}
public void push(T val)
{
if (loc < values.length) {
values[loc++] = val;
}
else {
throw new IllegalStateException("Stack full");
}
}
public T pop()
{
if (loc == 0) {
throw new IllegalStateException("Stack empty");
}
return (values[--loc]);
}
// other methods
}