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.

EveryWhere

Turn it inside out so I can see
The part of you that's drifting over me
And when I wake you're, you're never there
But when I sleep you're, you're everywhere
You're everywhere

Just tell me how I got this far
Just tell me why you're here and who you are
'Cause every time I look
You're never there
And every time I sleep
You're always there

'Cause you're everywhere to me
And when I close my eyes it's you I see
You're everything I know
That makes me believe
I'm not alone
I'm not alone

I recognize the way you make me feel
It's hard to think that
You might not be real
I sense it now, the water's getting deep
I try to wash the pain away from me
Away from me

'Cause you're everywhere to me
And when I close my eyes it's you I see
You're everything I know
That makes me believe
I'm not alone
I'm not alone

I am not alone
Whoa, oh, oooh, oh

And when I touch your hand
It's then I understand
The beauty that's within
It's now that we begin
You always light my way
I hope there never comes a day
No matter where I go
I always feel you so

'Cause you're everywhere to me
And when I close my eyes it's you I see
You're everything I know
That makes me believe
I'm not alone
'Cause you're everywhere to me
And when I catch my breath
It's you I breathe
You're everything I know
That makes me believe
I'm not alone

You're in everyone I see
So tell me
Do you see me?