YayBlogger.com
BLOGGER TEMPLATES

Jumat, 15 Februari 2013

ASD - STACK

Algoritma dan Struktur Data

STACK

 


Oleh
Nama     : Gusnia Syukriyawati
NIM        : 115090607111036
Asisten    : 1. Eka Mahargiyak
: 2. Ahmad Azeri


Program Teknologi Informasi dan Ilmu Komputer
Universitas Brawijaya
Malang
2012




BAB I
Pendahuluan

I.1 Dasar Teori

Stack adalah suatu urutan elemen yang elemennya dapat diambil dan ditambah hanya pada posisi akhir (top) saja. Contoh dalam kehidupan sehari-hari adalah tumpukan piring di sebuah restoran yang tumpukannya dapat ditambah pada bagian paling atas dan jika mengambilnya pun dari bagian paling atas pula. Lihat gambar 1.

 

Gambar 1. Macam-macam tumpukan

Ada 2 operasi paling dasar dari stack yang dapat dilakukan, yaitu :

1. Operasi push yaitu operasi menambahkan elemen pada urutan terakhir (paling atas).

2.  Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir dan menghapus elemen tersebut dari stack.
 


Sebagai contoh, misalkah ada data sebagai berikut : 1 3 5 6, maka data tersebut dapat tersimpan dalam bentuk sebagai berikut :

 
Selain operasi dasar stack (push dan stack), ada lagi operasi lain yang dapat terjadi dalam stack yaitu :

1. Proses deklarasi yaitu proses pendeklarasian stack.

2. Proses isempty yaitu proses pemeriksaan apakah stack dalam keadaan kosong.

3. Proses isfull yaitu proses pemeriksaan apakah stack telah penuh.

4. Proses inisialisasi yaitu proses pembuatan stack kosong, biasanya dengan pemberian nilai untuk top.

Pendeklarasian stack

Proses  pendeklarasian  stack  adalah  proses  pembuatan  struktur  stack  dalam  memori. Pendeklarasian   stack  yang  menggunakan  array  memiliki beberapa  bagian yaitu
-    top yang menunjuk posisi data terakhir (top)
-    elemen yang berisi data yang ada dalam stack. Bagian inilah yang berbentuk array.
-    maks_elemen yaitu variable yang menunjuk maksimal banyaknya elemen  dalam stack.

Operasi IsEmpty

Operasi  ini  digunakan  untuk  memeriksa  apakah  stack  dalam  keadaan  kosong.  Operasi ini  penting  dilakukan  dalam  proses  pop.  Ketika  suatu  stack  dalam  keadaan  kosong, maka proses pop tidak bisa dilakukan. Operasi IsEmpty pada stack yang menggunakan array. dilakukan  hanya dengan memeriksa  field top. Jika top bernilai   0 (untuk elemen yang dimulai dengan index 1) atau top bernilai -1 (untuk elemen yang dimulai dengan index 0), maka berarti stack dalam keadaan empty (kosong) yang akan me-return-kan true (1) dan jika tidak berarti stack mempunyai isi dan me-return-kan nilai false (0).

Operasi IsFull

Operasi  ini  berguna  untuk  memeriksa  keadaan  stack  apakah  sudah  penuh  atau  belum. Operasi ini akan menghasilkan nilai true (1) jika stack telah penuh dan akan menghasilkan nilai false (0) jika stack masih bisa ditambah. Operasi  ini akan memberikan nilai true  (1) jika field top sama dengan field maks_elemen (untuk array yang elemennya dimulai dari posisi 1) atau top sama dengan maks_elemen-1 (untuk array yang elemennya dimulai dari posisi 0).

Operasi Push

Operasi push adalah operasi dasar dari stack. Operasi ini berguna untuk menambah suatu elemen    data    baru    pada    stack    dan    disimpan    pada    posisi    top    yang    akan mengakibatkan posisi top akan berubah.
Langkah operasi push dalam array adalah dengan :
- Periksa apakah stack penuh (isfull). Jika bernilai false/0 (tidak penuh) maka proses  push dilaksanakan  dan  jika  pemeriksaan  ini  bernilai  true/1 (stack penuh), maka proses push digagalkan.
- Proses  push-nya  sendiri  adalah  dengan  menambah  field  top  dengan 1, kemudian elemen pada posisi top diisi dengan elemen data baru. Untuk lebih jelas, perhatikan lagi gambar 4 mengenai representasi stack dengan array.

Operasi Pop

Operasi pop adalah salah satu operasi paling dasar dari stack. Operasi ini berguna untuk mengambil  elemen  terakhir  (top)  dan  kemudian  menghapus  elemen  tersebut  sehingga posisi  top  akan  berpindah.  Operasi  ini  biasanya  dibuat  dalam  bentuk function yang me- return-kan nilai sesuai data yang ada di top.
Langkah operasi pop pada stack yang menggunakan array adalah terlebih dahulu memeriksa apakah stack sedang keadaan kosong, jika tidak kosong maka data diambil  pada  posisi yang  ditunjuk  oleh  posisi  top,  kemudian  simpan  dalam variable baru dengan nama data, kemudian posisi top - 1, kemudian nilai pada variable data di-return-kan ke function.

Operasi-operasi/fungsi Stack

    Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
    Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
    Clear : digunakan untuk mengosongkan stack
    IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong

Representasi stack dalam pemrograman, dapat dilakukan dengan 2 cara yaitu :
1. Representasi stack dengan array
2. Representasi stack dengan single linked listSebagai contoh representasi kedua cara tersebut dengan operasi yang dilakukan adalah push(1),  push(2),  pop, push(5),  push(8),  pos.




BAB II
Pembahasan

II.1 Source Code
No    Stack.java
     package Prak7;
public class Stack {
    private int size;
    private int top;
    public int[] data;
    public Stack(int n) {
        top = -1;
        size = n;
        data = new int [size];
    }
    public boolean isFull() {
        return (top == size -1 ) ? true : false;
    }
    public boolean isEmpty() {
        return (top == -1) ? true : false;     
    }
    public void push(int dt) {
        if (!isFull()) {
            data[++top] = dt;
        }
    }
    public int pop() {
        int hasil = -999;
        if (!isEmpty()) {
            hasil = data[top--];
        }
        return hasil;
    }
    public int top() {
        int dt = 0;
        if (!isEmpty()) {
            dt = data[top];
        }
        return dt;
    }
}

No    StackFrame.java
    Package Prak7;
import java.awt.Color;
import javax.swing.JOptionPane;
public class StackFrame extends javax.swing.JFrame {
    private int n = 1;
    Stack stk;
    public StackFrame() {
        super("Gusnia Syukriyawati - 115090607111036");
        initComponents();
        stk = new Stack(6);
    }
@SuppressWarnings("unchecked")
Generated Code
    private void jPushActionPerformed(java.awt.event.ActionEvent evt) {                                     
        stk.push(n);
        if (stk.top() == 1) {
            a.setBackground(Color.yellow);
        }
        else if (stk.top() == 2) {
            b.setBackground(Color.orange);
        }
        else if (stk.top() == 3) {
            c.setBackground(Color.red);
        }
        else if (stk.top() == 4) {
            d.setBackground(Color.green);
        }
        else if (stk.top() == 5) {
            e.setBackground(Color.blue);
        }
        else if (stk.top() == 6) {
            f.setBackground(Color.black);
        }
        if (n < 6) {
            n++;
        }                         
     // TODO add your handling code here:
    }                                    
    private void jPopActionPerformed(java.awt.event.ActionEvent evt) {                                    
        // TODO add your handling code here:
        if (stk.top() == 1) {
            a.setBackground(Color.white);
        }
        else if (stk.top() == 2) {
            b.setBackground(Color.white);
        }
        else if (stk.top() == 3) {
            c.setBackground(Color.white);
        }
        else if (stk.top() == 4) {
            d.setBackground(Color.white);
        }
        else if (stk.top() == 5) {
            e.setBackground(Color.white);
        }
        else if (stk.top() == 6) {
            f.setBackground(Color.white);
        }
        stk.pop();
        if (n > 1) {
            n--;
        }
    }        
     public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                           new StackFrame().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JTextField a;
    private javax.swing.JTextField b;
    private javax.swing.JTextField c;
    private javax.swing.JTextField d;
    private javax.swing.JTextField e;
    private javax.swing.JTextField f;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JButton jPop;
    private javax.swing.JButton jPush;
    // End of variables declaration
}



II.2 Output
Di push 4 kali                       



Di push 1 kali dari screenshot sebelumnya.


  
Di pop 2kali dari screenshot sebelumnya




BAB III
Penutup

III.1 Kesimpulan

1.    Stack atau tumpukan merupakan data yang sifatnya terurut yang dapat dilakukan operasi penyisipan dan penghapusan pada ujung data.
2.    Stack sering disebut LIFO (Last in First Out) yaiu=tu elemen yang paling terakhir disisipkan menjadi elemen yang paling dulu di ambil.

III.2 Saran
•    Mengajarkan materi secara bertahap hingga mahasiswa mengerti.
•    Menerangkan dan membahas tugas yang sudah di kumpulkan jika masih ada yang belum dimengerti.


Daftar Pustaka

1.    nafnafi.files.wordpress.com/2010/10/stack2.pdf pada tanggal 3 desember 2012
2.    Daniel F Stubbs & Neil W. Webre (1985). Data Structures with Abstract Data Type and Pascal. Brook/ Cole Publishing Company
3.    Aaron M. Tanenbaum, Yedidyah Langsam, Moshe J Augenstein (1990), Data Structures Using C, Prentice Hall.