Definición de una pila de caracteres en Java

1. Información general

En este tutorial, vamos a discutir cómo crear un carbón de leña pila en Java. Primero veremos cómo podemos hacer esto usando la API de Java, y luego veremos algunas implementaciones personalizadas.

Stack es una estructura de datos que sigue el principio LIFO (Last In First Out). Algunos de sus métodos habituales son:

  • empujar (elemento E) : empuja un elemento a la parte superior de la pila
  • pop () : elimina y devuelve el objeto en la parte superior de la pila
  • peek () : devuelve el objeto en la parte superior de la pila sin eliminarlo

2. Char Stack usando la API de Java

Java tiene una API incorporada llamada java.util.Stack . Dado que char es un tipo de datos primitivo , que no se puede usar en genéricos, tenemos que usar la clase contenedora de java.lang.Character para crear una pila :

Stack charStack = new Stack();

Ahora, podemos usar los métodos push , pop y peek con nuestro Stack .

Por otro lado, es posible que se nos pida que creemos una implementación personalizada de una pila. Por lo tanto, analizaremos un par de enfoques diferentes.

3. Implementación personalizada mediante LinkedList

Vamos a implementar un carbón de leña pila utilizando un LinkedList como nuestra estructura de datos back-end:

public class CharStack { private LinkedList items; public CharStack() { this.items = new LinkedList(); } }

Creamos una variable de elementos que se inicializa en el constructor.

Ahora, tenemos que proporcionar una implementación de los métodos push , peek y pop :

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; }

Los métodos push y peek utilizan los métodos integrados de LinkedList . Para el pop , primero usamos un iterador para verificar si hay un elemento en la parte superior o no. Si está allí, eliminamos el elemento de la lista llamando al método remove .

4. Implementación personalizada mediante una matriz

También podemos usar una matriz para nuestra estructura de datos:

public class CharStackWithArray { private char[] elements; private int size; public CharStackWithArray() { size = 0; elements = new char[4]; } }

Por encima, creamos un carbón matriz, que inicializar en el constructor con una capacidad inicial de 4. Además, tenemos un tamaño variable para realizar un seguimiento de cuántos registros están presentes en nuestra pila.

Ahora, implementemos el método push :

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; } }

Mientras empujamos un elemento a la pila, primero debemos verificar si nuestra matriz tiene la capacidad para almacenarlo. Si no, creamos una nueva matriz y duplicamos su tamaño. Luego copiamos los elementos antiguos a la matriz recién creada y la asignamos a nuestra variable de elementos .

Nota: para obtener una explicación de por qué queremos duplicar el tamaño de la matriz, en lugar de simplemente aumentar el tamaño en uno, consulte esta publicación de StackOverflow.

Finalmente, implementemos los métodos peek y pop :

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]; }

Para ambos métodos, después de validar que la pila no está vacía, devolvemos el elemento en el tamaño de posición - 1. Para pop , además de devolver el elemento, disminuimos el tamaño en 1.

5. Conclusión

En este artículo, hemos aprendido cómo hacer un carbón de leña pila mediante la API de Java, y vimos un par de implementación personalizada.

El código presentado en este artículo está disponible en GitHub.