Een Char Stack definiëren in Java

1. Overzicht

In deze tutorial bespreken we hoe u een char stack in Java. We zullen eerst zien hoe we dit kunnen doen met behulp van de Java API, en daarna zullen we enkele aangepaste implementaties bekijken.

Stack is een datastructuur die het LIFO-principe (Last In First Out) volgt. Enkele van de gebruikelijke methoden zijn:

  • push (E-item) - duwt een item naar de bovenkant van de stapel
  • knal() - verwijdert het object bovenaan de stapel en geeft het terug
  • kijkje() - geeft het object bovenaan de stapel terug zonder het te verwijderen

2. Char Stack met behulp van Java API

Java heeft een ingebouwde API met de naam java.util.Stack. Sinds char is een primitief datatype, die niet in generieke geneesmiddelen kunnen worden gebruikt, we moeten de wrapper-klasse van gebruiken java.lang.Character om een Stapel:

Stack charStack = nieuwe Stack ();

Nu kunnen we de Duwen, knal, en kijkje methoden met onze Stapel.

Aan de andere kant kan ons worden gevraagd om een ‚Äč‚Äčaangepaste implementatie van een stapel te bouwen. Daarom zullen we een aantal verschillende benaderingen onderzoeken.

3. Aangepaste implementatie met behulp van LinkedList

Laten we een char stapel met behulp van een LinkedList als onze back-end datastructuur:

openbare klasse CharStack {privé LinkedList-items; openbare CharStack () {this.items = nieuwe LinkedList (); }}

We hebben een items variabele die wordt geïnitialiseerd in de constructor.

Nu moeten we zorgen voor een implementatie van het Duwen, kijkje, en knal methoden:

openbare ongeldige push (tekenitem) {items.push (item); } public Character peek () {return items.getFirst (); } public Character pop () {Iterator iter = items.iterator (); Tekenitem = iter.next (); if (item! = null) {iter.remove (); item retourneren; } retourneer null; }

De Duwen en kijkje methoden gebruiken de ingebouwde methoden van een LinkedList. Voor knal, we gebruikten eerst een Iterator om te controleren of er een item bovenaan staat of niet. Als het er is, verwijderen we het item uit de lijst door de verwijderen methode.

4. Aangepaste implementatie met behulp van een array

We kunnen ook een array gebruiken voor onze datastructuur:

openbare klasse CharStackWithArray {private char [] elementen; privé int grootte; openbare CharStackWithArray () {size = 0; elementen = nieuw char [4]; }}

Hierboven maken we een char array, die we initialiseren in de constructor met een initiële capaciteit van 4. Bovendien hebben we een grootte variabele om bij te houden hoeveel records er in onze stapel aanwezig zijn.

Laten we nu het Duwen methode:

public void push (char item) {sureCapacity (size + 1); elementen [maat] = item; maat ++; } private void sureCapacity (int newSize) {char newBiggerArray []; if (elements.length <newSize) {newBiggerArray = new char [elements.length * 2]; System.arraycopy (elementen, 0, newBiggerArray, 0, grootte); elements = newBiggerArray; }}

Terwijl we een item naar de stapel duwen, moeten we eerst controleren of onze array de capaciteit heeft om het op te slaan. Als dit niet het geval is, maken we een nieuwe array en verdubbelen we de grootte. We kopiëren vervolgens de oude elementen naar de nieuw gemaakte array en wijzen deze toe aan onze elementen variabele.

Opmerking: voor een uitleg waarom we de grootte van de array willen verdubbelen, in plaats van de grootte simpelweg met één te vergroten, raadpleegt u dit StackOverflow-bericht.

Laten we tot slot het kijkje en knal methoden:

public char peek () {if (size == 0) {throw new EmptyStackException (); } retourelementen [grootte - 1]; } public char pop () {if (size == 0) {throw new EmptyStackException (); } retourelementen [- grootte]; }

Voor beide methoden, nadat we hebben gecontroleerd dat de stapel niet leeg is, retourneren we het element op positie maat - 1. Voor knal, naast het teruggeven van het element, verlagen we de grootte door 1.

5. Conclusie

In dit artikel hebben we geleerd hoe je een char stack met behulp van de Java API, en we zagen een aantal aangepaste implementaties.

De code die in dit artikel wordt gepresenteerd, is beschikbaar op GitHub.