Praktikum 4 Stack
MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA STACK Deskripsi Singkat Stack merupakan bentuk struktur data seperti tumpukan yang memiliki konsep Last In First Out (LIFO). Bermakna data yang terakhir masuk merupakan data yang paling pertama dikeluarkan. Pada stack hanya memiliki satu pintu saja. Satu pintu itu untuk masuk dan keluar. Bayangkan seperti menyusun buku ke dalam kotak. Maka buku yang dimasukkan terakhirlah yang harus dikeluarkan pertama sekali.
Tujuan 1. Memahami konsep stack 2. Menggunakan konsep stack pada program sederhana
Materi 1 : Membuat Stack Class yang bersifat collection atau koleksi bermakna dapat digunakan untuk menyimpan data. Agar data yang disimpan bisa bermacam-macam maka digunakanlah data bertipe Object. Berikut kode programnya yang juga menyertakan method main yang mengecek class Store tersebut. public class { private private private
StackX int maxSize; // size of stack array double[] stackArray; int top; // top of stack
public StackX(int { maxSize = s; stackArray = top = -1; // }
s) // constructor // set array size new double[maxSize]; // create array no items yet
public void push(double j) // put item on top of stack { stackArray[++top] = j; // increment top, insert item } public double pop() // take item from top of stack { return stackArray[top--]; // access item, decrement top }
Viska Mutiawani, M.IT, Irvanizam, M.Sc, Dr. Taufik Fuadi Abidin Jurusan Informatika Universitas Syiah Kuala
Praktikum 4 Stack
public double peek() // peek at top of stack { return stackArray[top]; } public boolean isEmpty() // true if stack is empty { return (top == -1); } public boolean isFull() // true if stack is full { return (top == maxSize-1); } } // end class StackX Operasi utama pada stack adalah push() dan pop(). Method push() digunakan untuk memasukkan data ke dalam stack. Sedangkan method pop() digunakan untuk mengeluarkan data yang paling terakhir dimasukkan. Selain itu terdapat method tambahan lain yaitu peek(), isEmpty(), isFull(). Method peek() digunakan untuk melihat data yang paling akhir dimasukkan. Method isEmpty() digunakan untuk menguji apakah stack kosong atau tidak. Method isFull() digunakan untuk menguji apakah stack sudah penuh atau belum. Implementasi konsep stack pada program di atas menggunakan array. Sehingga pada method constructor melibatkan pemberian nilai awal pada ukuran stack (array), mencipta array dan nilai top. Nilai top merupakan indeks data yang paling terakhir.
Materi 2 : Menggunakan class StackX Berikutnya kita membuat class sederhana yang akan menggunakan class StackX yang telah dibuat di atas. class StackApp { public static void main(String[] args) { StackX theStack = new StackX(10); // make new stack theStack.push(20); // push items onto stack theStack.push(40); theStack.push(60); theStack.push(80); while( !theStack.isEmpty() ) // until it's empty, { // delete item from stack double value = theStack.pop(); System.out.print(value); // display it Viska Mutiawani, M.IT, Irvanizam, M.Sc, Dr. Taufik Fuadi Abidin Jurusan Informatika Universitas Syiah Kuala
Praktikum 4 Stack
System.out.print(" "); } // end while System.out.println(""); } // end main() } // end class StackApp
Apakah output dari program di atas? Bagaimana tampilan hasilnya jika dibandingkan dengan urutan data yang dimasukkan?
Materi 3 : Class StackX Menggunakan Generic Program stack yang sebelumnya menggunakan array bertipe int. Jika kita ingin menyimpan data char, tinggal mengubah tipe data yang disimpan menjadi char. Namun proses seperti ini sangat membuang waktu karena untuk setiap tipe data memerlukan class tersendiri. Seperti yang telah kita pelajari pada praktikum 3, untuk menyimpan data yang umum, kita dapat memanfaatkan class Object yang dibuat dalam format generic. Berikut ini merupakan contoh program stackXGeneric yang merupakan stack dalam format generic. public class { private private private
StackXGeneric <E> int maxSize; // size of stack array E [] stackArray; int top; // top of stack
public StackXGeneric(int s) // constructor { // set array size // menggunakan conditional operator // jika true, ukuran stack x, jika tidak diubah menjadi 10 maxSize = s > 0 ? s : 10; stackArray = (E[]) new Object[maxSize]; // create array top = -1; // no items yet } public void push(E j) // put item on top of stack { stackArray[++top] = j; // increment top, insert item } public E pop() // take item from top of stack { return stackArray[top--]; // access item, decrement top } public E peek() // peek at top of stack Viska Mutiawani, M.IT, Irvanizam, M.Sc, Dr. Taufik Fuadi Abidin Jurusan Informatika Universitas Syiah Kuala
Praktikum 4 Stack
{ return stackArray[top]; } public boolean isEmpty() // true if stack is empty { return (top == -1); } public boolean isFull() // true if stack is full { return (top == maxSize-1); } } // end class StackXGeneric
Berikutnya kita coba gunakan class StackXGeneric seperti contoh berikut. public class TesStackGeneric { public static void main(String[] args) { StackXGeneric
theStack = new StackXGeneric (10); // make new stack StackXGeneric stackChar = new StackXGeneric (10); // make new stack theStack.push(20); // push items onto stack theStack.push(40); theStack.push(60); theStack.push(80); while( !theStack.isEmpty() ) // until it's empty, { // delete item from stack Integer value = theStack.pop(); System.out.print(value); // display it System.out.print(" "); } // end while System.out.println(""); stackChar.push('<'); // push items onto stack stackChar.push('a'); stackChar.push('2'); stackChar.push('>'); while( !stackChar.isEmpty() ) // until it's empty, { // delete item from stack Character value = stackChar.pop(); System.out.print(value); // display it System.out.print(" "); } // end while Viska Mutiawani, M.IT, Irvanizam, M.Sc, Dr. Taufik Fuadi Abidin Jurusan Informatika Universitas Syiah Kuala
Praktikum 4 Stack
System.out.println(""); } // end main() }
Materi 4 : Penggunaan Stack untuk Membalik Kata Salah satu kegunaan stack adalah untuk membalik karakter-karakter pada suatu kata. Berikut kita lihat contoh program tersebut. class Reverser { private String input; // input string private String output; // output string public Reverser() // constructor { input = ""; } public String doRev(String in) // reverse the string { input = in; int stackSize = input.length(); // get max stack size StackXGeneric theStack = new StackXGeneric (stackSize); // make stack for(int j=0; j
Praktikum 4 Stack
Perhatikan output yang dihasilkan pada program di atas. Apa yang dapat anda simpulkan?
LATIHAN 1 Tambahkan method pada class Reverser untuk membalik kata-kata pada suatu kalimat. Kemudian uji method tersebut.
SOAL-SOAL 1.
Viska Mutiawani, M.IT, Irvanizam, M.Sc, Dr. Taufik Fuadi Abidin Jurusan Informatika Universitas Syiah Kuala