Определение стека 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 LinkedListitems; public CharStack() { this.items = new LinkedList (); } }
Мы создали предметы переменная, которая инициализируется в конструкторе.
Теперь мы должны обеспечить реализацию толкать , заглянуть , и поп- методика:
public void push(Character item) { items.push(item); } public Character peek() { return items.getFirst(); } public Character pop() { Iteratoriter = 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 .