Mendefinisikan Char Stack di Java

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan membincangkan cara membuat stack char di Java. Pertama-tama kita akan melihat bagaimana kita dapat melakukan ini dengan menggunakan Java API, dan kemudian kita akan melihat beberapa implementasi khusus.

Stack adalah struktur data yang mengikuti prinsip LIFO (Last In First Out). Beberapa kaedah biasa adalah:

  • tolak (item E) - menolak item ke bahagian atas timbunan
  • pop () - membuang dan mengembalikan objek di bahagian atas timbunan
  • mengintip () - mengembalikan objek di bahagian atas timbunan tanpa mengeluarkannya

2. Char Stack Menggunakan Java API

Java mempunyai API terbina dalam bernama java.util.Stack . Oleh kerana char adalah jenis data primitif , yang tidak dapat digunakan dalam generik, kita harus menggunakan kelas pembungkus java.lang.Character untuk membuat Stack :

Stack charStack = new Stack();

Sekarang, kita dapat menggunakan kaedah push , pop , dan peek dengan Stack kita .

Sebaliknya, kami mungkin diminta untuk membangun pelaksanaan susunan khusus. Oleh itu, kami akan melihat beberapa pendekatan yang berbeza.

3. Pelaksanaan Tersuai Menggunakan LinkedList

Mari laksanakan stack char menggunakan LinkedList sebagai struktur data back-end kami:

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

Kami membuat pemboleh ubah item yang akan diinisialisasi dalam konstruktor.

Sekarang, kita harus menyediakan pelaksanaan kaedah push , peek , dan 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; }

Kaedah push and peek menggunakan kaedah built-in LinkedList . Untuk pop , kami pertama kali menggunakan Iterator untuk memeriksa sama ada terdapat item di bahagian atas atau tidak. Sekiranya ia ada, kami membuang item tersebut dari senarai dengan memanggil kaedah hapus .

4. Pelaksanaan Tersuai Menggunakan Array

Kami juga dapat menggunakan susunan untuk struktur data kami:

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

Di atas, kami membuat array char , yang kami mulakan dalam konstruktor dengan kapasiti awal 4. Selain itu, kami mempunyai pemboleh ubah ukuran untuk melacak berapa banyak rekod yang ada di timbunan kami.

Sekarang, mari kita laksanakan kaedah tolak :

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

Semasa mendorong item ke tumpukan, pertama-tama kita perlu memeriksa apakah array kita mempunyai keupayaan untuk menyimpannya. Sekiranya tidak, kami membuat susunan baru dan menggandakan ukurannya. Kami kemudian menyalin elemen lama ke susunan yang baru dibuat dan memberikannya kepada pemboleh ubah elemen kami .

Nota: untuk penjelasan mengapa kami ingin menggandakan ukuran array, dan bukannya hanya menambah ukuran satu, sila rujuk postingan StackOverflow ini.

Akhirnya, mari kita laksanakan kaedah peek dan 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]; }

Untuk kedua kaedah, setelah mengesahkan bahawa timbunan tidak kosong, kami mengembalikan elemen pada ukuran kedudukan - 1. Untuk pop , selain mengembalikan elemen, kami menurunkan ukurannya dengan 1.

5. Kesimpulan

Dalam artikel ini, kami belajar bagaimana membuat stack char menggunakan Java API, dan kami melihat beberapa implementasi khusus.

Kod yang disajikan dalam artikel ini terdapat di GitHub.