Definiranje char stacka u Javi

1. Pregled

U ovom uputstvu razgovarat ćemo o tome kako stvoriti ugljen stog u Javi. Prvo ćemo vidjeti kako to možemo učiniti pomoću Java API-ja, a zatim ćemo pogledati neke prilagođene implementacije.

Stog je struktura podataka koja slijedi LIFO (Last In First Out) princip. Neke od njegovih uobičajenih metoda su:

  • push (E stavka) - gurne predmet na vrh hrpe
  • pop () - uklanja i vraća objekt na vrhu stoga
  • zaviriti () - vraća objekt na vrhu stoga bez uklanjanja

2. Char Stack koristeći Java API

Java ima ugrađeni API pod nazivom java.util.Stack. Od ugljen je primitivni tip podataka, koji se ne mogu koristiti u generičkim lijekovima, moramo koristiti klasu omota od java.lang.Lik stvoriti a Stog:

Stog charStack = novi Stack ();

Sada možemo koristiti gurnuti, pop, i zaviriti metode s našim Stog.

S druge strane, od nas se može tražiti da napravimo prilagođenu implementaciju stoga. Stoga ćemo razmotriti nekoliko različitih pristupa.

3. Korištenje prilagođene implementacije LinkedList

Provedimo a ugljen slagati pomoću a LinkedList kao naša pozadinska struktura podataka:

javna klasa CharStack {privatne stavke na LinkedListu; javni CharStack () {this.items = novi LinkedList (); }}

Stvorili smo predmeta varijabla koja se inicijalizira u konstruktoru.

Sada moramo osigurati provedbu gurnuti, zaviriti, i pop metode:

javni void push (stavka znakova) {items.push (stavka); } javni znak peek () {return items.getFirst (); } public Character pop () {Iterator iter = items.iterator (); Stavka znaka = iter.next (); if (item! = null) {iter.remove (); predmet povrata; } return null; }

The gurnuti i zaviriti metode koriste ugrađene metode a LinkedList. Za pop, prvo smo koristili Iterator da provjerite ima li na vrhu stavka ili ne. Ako je tu, stavku uklanjamo sa popisa pozivom na ukloniti metoda.

4. Prilagođena implementacija pomoću niza

Također možemo koristiti niz za našu strukturu podataka:

javna klasa CharStackWithArray {private char [] elementi; privatna int veličina; javni CharStackWithArray () {veličina = 0; elementi = novi char [4]; }}

Iznad kreiramo ugljen polje, koje inicijaliziramo u konstruktoru s početnim kapacitetom od 4. Pored toga, imamo i veličina varijabla za praćenje koliko je zapisa prisutno u našem stogu.

Sada, provedimo gurnuti metoda:

javni void push (char stavka) {sureCapacity (size + 1); elementi [veličina] = stavka; veličina ++; } privatna void osiguraCapacity (int newSize) {char newBiggerArray []; if (elements.length <newSize) {newBiggerArray = new char [elements.length * 2]; System.arraycopy (elementi, 0, newBiggerArray, 0, veličina); elementi = noviBiggerArray; }}

Dok guramo stavku u stog, prvo moramo provjeriti ima li naš niz kapacitet da je pohrani. Ako ne, kreiramo novi niz i udvostručujemo njegovu veličinu. Zatim kopiramo stare elemente u novostvoreni niz i dodijelimo ga našem elementi varijabilna.

Napomena: za objašnjenje zašto želimo udvostručiti veličinu polja, a ne jednostavno povećati veličinu za jedan, pogledajte ovaj StackOverflow post.

Napokon, provedimo zaviriti i pop metode:

javni char peek () {if (size == 0) {baciti novi EmptyStackException (); } elementi povratka [veličina - 1]; } public char pop () {if (size == 0) {throw new EmptyStackException (); } elementi povratka [- veličina]; }

Za obje metode, nakon provjere da stog nije prazan, vraćamo element na položaj veličina - 1. Za pop, uz vraćanje elementa, dekrementiramo i veličina po 1.

5. Zaključak

U ovom smo članku naučili kako napraviti a ugljen stog koristeći Java API, i vidjeli smo nekoliko prilagođenih implementacija.

Kôd predstavljen u ovom članku dostupan je na GitHub-u.