Определение стека char в Java
1. Обзор
В этом учебнике мы обсудим, как создать char стек в Java. Сначала мы увидим, как мы можем сделать это с помощью Java API, а затем мы будем смотреть на некоторые пользовательские реализации.
Стек — это структура данных, которая следует принципу LIFO (Last In First Out). Некоторые из его общих методов:
- push (E пункт) – толкает элемент в верхней части стека
- поп() – удаляет и возвращает объект в верхней части стека
- peek () – возвращает объект в верхней части стека, не удаляя его
2. Стек char используя API Java
Java имеет встроенный API под названием java.util.Stack . С char является примитивным типом данных , которые не могут быть использованы в дженериках, мы должны использовать класс обертки java.lang.Character создать Стек :
StackcharStack = new Stack<>();
Теперь мы можем использовать толкать , поп- , и заглянуть методы с нашими Стек .
С другой стороны, нас могут попросить создать пользовательскую реализацию стека. Поэтому мы будем искать несколько различных подходов.
3. Пользовательская реализация с использованием LinkedList
Давайте реализуем char стек с использованием LinkedList как наша структура данных бэк-энда:
public class CharStack {
private LinkedList items;
public CharStack() {
this.items = new LinkedList();
}
} Мы создали предметы переменная, которая инициализируется в конструкторе.
Теперь мы должны обеспечить реализацию толкать , заглянуть , и поп- методика:
public void push(Character item) {
items.push(item);
}
public Character peek() {
return items.getFirst();
}
public Character pop() {
Iterator iter = items.iterator();
Character item = iter.next();
if (item != null) {
iter.remove();
return item;
}
return null;
} толкать и заглянуть методы используют встроенные методы LinkedList . Для поп- , мы впервые использовали Итератор чтобы проверить, есть ли элемент на вершине или нет. Если он там, мы удаляем элемент из списка, позвонив в удалить метод .
4. Пользовательская реализация с использованием массива
Мы также можем использовать массив для нашей структуры данных:
public class CharStackWithArray {
private char[] elements;
private int size;
public CharStackWithArray() {
size = 0;
elements = new char[4];
}
}Выше мы создаем char массив, который мы инициализируем в конструкторе с начальной мощностью 4. Кроме того, у нас есть размер переменная, чтобы отслеживать, сколько записей присутствует в нашем стеке.
Теперь давайте реализуем толкать метод:
public void push(char item) {
ensureCapacity(size + 1);
elements[size] = item;
size++;
}
private void ensureCapacity(int newSize) {
char newBiggerArray[];
if (elements.length < newSize) {
newBiggerArray = new char[elements.length * 2];
System.arraycopy(elements, 0, newBiggerArray, 0, size);
elements = newBiggerArray;
}
}При нажатии элемента в стек, мы сначала должны проверить, если наш массив имеет возможность хранить его. В этом случае мы создаем новый массив и удваиваем его размер. Затем мы копируют старые элементы в недавно созданный массив и присваиваем его нашему элементы переменная.
Примечание: для объяснения того, почему мы хотим удвоить размер массива, а не просто увеличить размер на один, пожалуйста, обратитесь к этой StackOverflow пост .
Наконец, давайте реализуем заглянуть и поп- методика:
public char peek() {
if (size == 0) {
throw new EmptyStackException();
}
return elements[size - 1];
}
public char pop() {
if (size == 0) {
throw new EmptyStackException();
}
return elements[--size];
}Для обоих методов, после проверки того, что стек не пуст, мы возвращаем элемент в положение размер – 1. Для поп- , В дополнение к возвращению элемента, мы decrement размер на 1.
5. Заключение
В этой статье мы узнали, как сделать char стек с помощью Java API, и мы увидели несколько пользовательских реализации.
Код, представленный в данной статье, доступен более на GitHub .