Char verem meghatározása Java-ban

1. Áttekintés

Ebben az oktatóanyagban megvitatjuk a char verem a Java-ban. Először meglátjuk, hogyan tehetjük ezt meg a Java API használatával, majd megnézünk néhány egyéni megvalósítást.

A Stack egy olyan adatstruktúra, amely a LIFO (Last In First Out) elvét követi. Néhány általános módszere a következő:

  • nyomás (E elem) - egy elemet tol a verem tetejére
  • pop() - eltávolítja és visszaadja a verem tetején lévő objektumot
  • kandikál() - a verem tetején lévő objektumot eltávolítás nélkül adja vissza

2. Char Verem a Java API használatával

A Java beépített API-val rendelkezik java.util.Stack. Mivel char egy primitív adattípus, amelyek nem használhatók a generikus gyógyszerekben, a wrapper osztályát kell használnunk java.lang.Karakter létrehozni a Kazal:

Verem charStack = új Verem ();

Most használhatjuk a nyom, pop, és kandikál módszerek a mi Kazal.

Másrészt felkérhetõk arra, hogy hozzunk létre egy verem egyedi megvalósítását. Ezért megvizsgálunk pár különböző megközelítést.

3. Egyedi megvalósítás LinkedList

Végezzük el a char verem a segítségével LinkedList háttér-adatstruktúránkként:

nyilvános osztályú CharStack {privát LinkedList elemek; public CharStack () {this.items = new LinkedList (); }}

Hoztunk létre egy elemeket változó, amely inicializálódik a konstruktorban.

Most biztosítanunk kell a nyom, kandikál, és pop mód:

public void push (Karakter elem) {items.push (item); } public Character peek () {return items.getFirst (); } public Character pop () {Iterator iter = items.iterator (); Karakterelem = iter.next (); if (elem! = null) {iter.remove (); áru visszaküldés; } return null; }

A nyom és kandikál módszerek a beépített módszereket használják LinkedList. Mert pop, először egy Iterátor ellenőrizni, hogy van-e elem a tetején, vagy sem. Ha ott van, akkor eltávolítjuk az elemet a listáról a eltávolítani módszer.

4. Egyedi megvalósítás tömb használatával

Tömböt is használhatunk adatstruktúránkhoz:

public class CharStackWithArray {private char [] elemek; privát int méret; public CharStackWithArray () {size = 0; elemek = új char [4]; }}

Fent létrehozunk egy char tömb, amelyet a konstruktorban inicializálunk, kezdeti kapacitása 4. Ezenkívül van egy méret változó annak nyomon követéséhez, hogy hány rekord van jelen a veremben.

Most hajtsuk végre a nyom módszer:

public void push (char item) {užtikrintiCapacity (méret + 1); elemek [méret] = elem; méret ++; } private void užtikrintiCapacity (int newSize) {char newBiggerArray []; if (elemek.hossz <newSize) {newBiggerArray = new char [elemek.hossz * 2]; System.arraycopy (elemek, 0, newBiggerArray, 0, méret); elemek = newBiggerArray; }}

Miközben egy elemet a verembe tolunk, először meg kell vizsgálnunk, hogy a tömbünk képes-e tárolni. Ha nem, létrehozunk egy új tömböt, és megduplázzuk a méretét. Ezután átmásoljuk a régi elemeket az újonnan létrehozott tömbbe, és hozzárendeljük a sajátunkhoz elemek változó.

Megjegyzés: annak magyarázatát, hogy miért akarjuk megduplázni a tömb méretét, ahelyett, hogy egyszerűen eggyel növelnénk a méretet, olvassa el ezt a StackOverflow bejegyzést.

Végül hajtsuk végre a kandikál és pop mód:

public char peek () {if (size == 0) {dobja új EmptyStackException (); } return elemek [méret - 1]; } public char pop () {if (size == 0) {dobja új EmptyStackException (); } return elemek [- méret]; }

Mindkét módszer után, miután ellenőrizzük, hogy a verem nem üres-e, az elemet visszahelyezzük a helyére méret - 1. A pop, az elem visszaküldése mellett a méret által 1.

5. Következtetés

Ebben a cikkben megtanultuk, hogyan kell a char verem a Java API segítségével, és láttunk pár egyedi megvalósítást.

Az ebben a cikkben bemutatott kód elérhető a GitHubon.