Selasa, 02 Maret 2010

Struktur Data Stack dan Queue

Contoh Program:


1. Stack

import java.util.Scanner;

import java.io.*;

class tumpukan{

private int max;

private long[]isi;

private int top;

public tumpukan(int n){

max=n;

isi=new long [max];

top=-1;

}

public boolean isFull(){

return(top==max-1);

}

public boolean isEmpty(){

return(top==-1);

}

public void push(long j){

isi[++top]=j;

}

public long pop(){

return isi[top--];

}

public long peek(){

return isi[top];

}

public void tampil(){

for(int i=top; i>=0; i--){

System.out.print(isi[i]);

System.out.print(" ");

}

System.out.println("");

}

public void clear(){

while(!isEmpty())

pop();

}

}

public class javaStack {

public static void main (String[]args){

tumpukan tumpuk = new tumpukan(10);

int menu;

do{

System.out.println("Pilih Menu");

System.out.println("1. Tambah data stack");

System.out.println("2. Ambil data stack");

System.out.println("3. Lihat data stack");

System.out.println("4. Buat stack baru");

System.out.println("5. Keluar");

System.out.print("Pilihan anda --> ");

Scanner input = new Scanner(System.in);

menu = input.nextInt();

System.out.println("");

switch(menu){

case 1 : {

if(tumpuk.isFull()) System.out.println("Stack sudah penuh!");

else{

System.out.print("Datanya -->");

long data = input.nextLong();

tumpuk.push(data);

}

break;

}

case 2 : {

if(tumpuk.isEmpty()) System.out.println("Stack kosong");

else{

System.out.println("Data " + tumpuk.peek() + " diambil");

tumpuk.pop();

}

break;

}

case 3: {

if(tumpuk.isEmpty()) System.out.println("Stack kosong!");

else {

tumpuk.tampil();

}

break;

}

case 4: tumpuk.clear();

break;

}

}while (menu>0 &&menu<5);

}

}


2. Queue

import java.util.Scanner;

import java.io.*;

class antrian{

private int max;

private long [] isi;

private int ekor;

public antrian(int n){

max=n;

isi = new long[max];

ekor = -1;

}

public boolean isFull(){

return (ekor == max-1);

}

public boolean isEmpty(){

return(ekor==-1);

}

public void enQueue(long j){

ekor++;

isi[ekor]= j;

}

public void deQueue(){

for (int i=0; i

isi[i]= isi[i+1];

ekor--;

}

public long peek(){

return isi[0];

}

public void tampil(){

for (int i=0; i

System.out.print(isi[i]);

System.out.print(" ");

}

System.out.println("");

}

public void clear(){

while(!isEmpty())

deQueue();

}

}

public class javaQueue {

public static void main (String[]args){

antrian antri =new antrian(5);

int menu;

do{

System.out.println("Pilih Menu");

System.out.println("1. Tambah data queue");

System.out.println("2. Ambil data queue");

System.out.println("3. Lihat data queue");

System.out.println("4. Buat queue baru");

System.out.println("5. Keluar");

System.out.println("Pilihan Anda --->: ");

Scanner input = new Scanner (System.in);

menu = input.nextInt();

System.out.println("");

switch(menu){

case 1 : {

if(antri.isFull())System.out.println("Queue sudah penuh");

else {

System.out.print("Datanya--> ");

long data = input.nextLong();

antri.enQueue(data);

}

break;

}

case 2 : {

if (antri.isEmpty()) System.out.println("Queue kosong");

else {

System.out.println("Daata" + antri.peek()+ " diambi");

antri.deQueue();

}

break;

}

case 3 : {

if(antri.isEmpty()) System.out.println( " Queue kosong");

else{

antri.tampil();

}

break;

}

case 4 : antri.clear();

break;

}

} while(menu>0 &&menu<5);

}

}

Perbedaan stack dan Queue

1. Stack

Dalam dunia komputer, penggunaan stack atau tumpukan merupakan salah satu komponen penting untuk menjamin proses penanganan suatu data disamping hal lain seperti Queue (antrian).

Elemen-elemen yang berada dalam stack memiliki prinsip dasar dalam pengoperasiannya yaitu prinsip LIFO (Last In First Out) atau yang masuk paling belakang akan memiliki prioritas untuk keluar paling depan. Terdapat empat operasi pada stack, yakni CREATE (stack), ISEMPTY(stack), PUSH(elemen, stack), dan POP (stack).

Suatu stack dapat digambarkan sebagai suatu array (larik) berdimensi satu yang elemen-elemennya berkisar antara 1 sampai n elemen. Dengan demikian jika suatu stack didefinisikan dengan n elemen maka dapat dikatakan jumlah maksimum dari stack atau NOEL(S) nya adalah n, sehingga penambahan elemen stack yang ke n+1 tidak diperkenankan atau stack tersebut dalam kondisi overflow. Hal tersebut juga berlaku untuk stack dengan nilai minimum yaitu NOEL(S) dari stack dalam kondisi 0, jika dilakukan operasi pengambilan elemen atas stack tersebut akan mengakibatkan stack tersebut dalam kondisi underflow. Dua kondisi tersebut merupakan dasar dalam merancang suatu aplikasi pemrograman komputer.

Suatu stack pada dasarnya merupakan array yang memuat 2 informasi penting yaitu NOEL yang berfungsi untuk mengetahui jumlah tumpukan dan TOP yang berfungsi untuk menentukan posisi puncak dari suatu stack. Stack juga memiliki 2 kondisi yang dapat menyebabkan error yaitu kondisi underflow jika stack tersebut dalam keadaan kosong dilakukan operasi ambil data (pop) dan kondisi overflow jika stack dalam keadaan penuh dilakukan operasi penambahan data. Kedua posisi ini dapat menyebabkan stack dalam keadaan tidak valid sehingga penggunaan error trapping untuk menampung kondisi tidak valid perlu diperhatikan.

2. Queue

Struktur data antrean atau queue adalah suatu bentuk khusus dari linear list, dengan operasi penyisipan (insertion) hanya diperbolehkan pada salah satu sisi, yang disebut sisi belakang (REAR), dan operasi penghapusan (deletion) hanya diperbolehkan pada sisi lainnya, yang disebut sisi depan (FRONT), dari list. Ada 4 operasi dasar yang dapat dilakukan pada struktur data antrean, yakni :

1. CREATE(antrean)

2. ISEMPTY(antrean)

3. INSERT(elemen,antrean)

4. REMOVE(antrean)

Antrean dapat disajikan di dalam komputer dalam berbagai cara. Biasanya dengan menggunakan one-way-list (linear linked list) ataupun menggunakan array. Kalau tidak disebutkan lain, maka antrean kita sajikan dalam array QUEUE, dengan dilengkapi dua variabel penunjuk. FRONT, berisi lokasi dari elemen DEPAN antrean dan REAR, berisi lokasi dari elemen BELAKANG antrean. Nilai FRONT = NULL menunjukkan bahwa antrean adalah hampa.

Antrean dikatakan beroperasi dalam cara FIRST-IN-FIRST-OUT (FIFO). Disebut demikian karena elemen yang pertama masuk merupakan elemen yang pertama ke luar.

Kesimpulan

Pada stack menggunakan prinsip LIFO (Last In First Out) yang masuk paling belakang akan memiliki prioritas untuk keluar paling depan

Sedangkan antrean atau queue beroperasi dalam cara FIRST-IN-FIRST-OUT (FIFO) elemen yang pertama masuk merupakan elemen yang pertama ke luar.

8 komentar:

  1. makasih ya mbk....

    BalasHapus
  2. Thanks Ya, Moga Bermanfaat

    BalasHapus
  3. Thank's mbak. Berguna banget bwt referensi tugas saya

    BalasHapus
  4. makasih yaa.. :) berguna banget buat referensi belajar saya.

    BalasHapus
  5. Tulisan yang berguna... pas lagi dapat tugas membuat inputan pada stack dan queue.
    Bisa untuk referensi. Tapi bagaimana ya? kalau membuat sebuah menu yang didalamnya ada beberapa pilihan...
    seperti...
    1. Stack.
    2. Queue.
    3. Array,
    4. Linked List
    5. Double Linked List
    6. Binary Tree.

    wooww... pasti memakan banyak coding ya, bila digabung menjadi sebuah menu.

    BalasHapus
  6. knapa pas di public class nya pada merah?

    BalasHapus