Стек — одна из наиболее важных структур данных в языке Java. Его реализация должна включать как минимум следующие методы:
1. операция pop() pop, извлекает верхний элемент стека.
2.push(E e) нажатие операции
3.peek() Просмотр верхнего элемента стека
4.isEmpty() Пустой ли стек?
Кроме того, при реализации стека следует учитывать несколько вопросов:
1. Первоначальный размер стека и как добавить новое пространство в стек после того, как стек заполнится.
2. Требуется синхронизация при обновлении стека
Простой пример использования массива для реализации стека. Код выглядит следующим образом:
Скопируйте код кода следующим образом:
публичный класс Stack<E> {
// Java не поддерживает универсальные массивы. Если вам нужно их использовать, используйте контейнер, предоставляемый Java.
частный стек Object[];
//Начальный размер стека по умолчанию
частный статический финал int INIT_SIZE = 2;
//Индекс вершины стека
частный индекс int;
общественный стек () {
стек = новый объект [INIT_SIZE];
индекс = -1;
}
/**
*Метод строительства
*
* @param initSize
* Начальный размер стека
*/
общественный стек (int initSize) {
если (initSize <0) {
выбросить новое IllegalArgumentException();
}
стек = новый объект [initSize];
индекс = -1;
}
/**
* Поп-операция
*
* @return верхний объект стека
*/
общедоступная синхронизированная E pop() {
если (!isEmpty()) {
E темп = просмотр();
стек[индекс--] = ноль;
температура возврата;
}
вернуть ноль;
}
/**
* Нажмите операцию
*
* @param объект
* Объект ожидает помещения в стек
*/
общедоступная синхронизированная недействительность push (E obj) {
если (isFull()) {
Объект [] темп = стек;
// Если стек полон, создаем стек, в два раза превышающий текущее пространство стека
стек = новый объект[2 * stack.length];
System.arraycopy(temp, 0, стек, 0, temp.length);
}
стек[++индекс] = объект;
}
/**
* Просмотр верхнего объекта в стеке
*
* @return верхний объект стека
*/
публичный E peek() {
если (!isEmpty()) {
вернуть (E) стек[индекс];
}
вернуть ноль;
}
/**
* Проверьте, пуст ли стек
*
* @return Возвращает true, если стек пуст, в противном случае возвращает false
*/
общедоступное логическое значение isEmpty() {
индекс возврата == -1;
}
/**
* Проверьте, заполнен ли стек
*
* @return Возвращает true, если стек полон, в противном случае возвращает false
*/
общедоступное логическое значение isFull() {
индекс возврата >= stack.length - 1;
}
}
Наконец, структура данных стека (java.util.Stack) реализована в Java. Она реализуется путем наследования класса Vector. В обычных обстоятельствах мы можем просто использовать ее напрямую.