:::: MENU ::::

Logika Dasar Stack (Tumpukan)

Sebenarnya sudah banyak situs – situs atau blog yang membahas tentang Stack (tumpukan) pada Struktur Data.  Tapi ga papa, saya ikut meramaikan saja, biar tambah bingung *eh, tambah referensi maksudnya :D.  Agar lebih fokus, saya anggap semua sudah paham operasi operasi dasar pada pemrograman (dalam hal ini memakai bahasa C++)

Langsung saja, Stack / Tumpukan adalah sekumpulan objek yang menggunakan prinsip LIFO ( Last In First Out), atau kalau di Bahasa Indonesiakan, yang terakhir kali masuk itu yang akan pertama kali keluar.

Logika Dasar Stack

Logika Dasar Stack

Nah, dalam stack, ada beberapa operasi dalam stack, yaitu :

  1. IsEmpty -> Digunakan untuk mengecek apakah stack / tumpukan kosong atau tidak
  2. IsFull -> Digunakan untuk mengecek apakah stack / tumpukan sudah penuh atau belum
  3. PUSH -> Digunakan untuk operasi penambahan data pada stack
  4. POP -> Digunakan untuk operasi pengambilan data pada stack
  5. Clear -> Digunakan untuk menghapus isi stack / tumpukan
  6. View -> Digunakan untuk melihat isi stack / tumpukan

Kunci dalam stack ini adalah adanya sebuah penunjuk / pointer dalam mengakses indeks karena stack dominan menggunakan array.  Sehingga penunjuk / pointer digunakan untuk mengakses indek dalam array.  Karena Stack menggunakan beberapa operasi, kita akan bangun program stack menggunakan modular programming, atau memecah program dalam beberapa fungsi – fungsi.

1. Deklarasi Awal Stack

Sebagai contoh, kita akan membuat sebuah stack dengan banyak nya tumpukan / data adalah 7.  Maka kita deklarasikan terlebih dahulu variabel untuk stack sendiri dan penunjuknya.

Gambaran Stack dengan banyak data maksimal 7

Gambaran Stack dengan banyak data maksimal 7

int max = 7;  //inisialisasi banyak maksimal data
int data[7]; //inisialisasi array untuk menampung data
int penunjuk = -1; //inisialisasi penunjuk

Ingat! Deklarasikan semua variabel diluar fungsi.  Karena nantinya akan menggunakan modular programming.

Mengapa penunjuk nya dimulai dari -1 ? karena index dalam array dimulai dari 0, bukan 1.  Sehingga jika penunjuk dimulai dari 0, artinya array itu sudah ada isinya pada indeks pertama.

2. IsEmpty

Operasi IsEmpty digunakan untuk mengecek apakah stack kosong / isi.  Untuk mengetahui nya, cukup cek penunjuk,jika dia bernilai -1, maka stack masih kosong, tetapi jika penunjuk bernilai bukan -1, maka stack itu pasti sudah ada isinya.

bool IsEmpty(){
     if(penunjuk == -1)
       return true;
     else
       return false;
}

Maksudnya, jika penunjuk bernilai -1, artinya stack kosong (mengembalikan nilai true).  Namun jika nilainya != -1 maka stack sudah ada isinya, sehingga mengembalikan nilai false.

3. IsFull

Kebalikan dari IsEmpty, operasi IsFull digunakan untuk mengecek apakah stack sudah penuh atau belum.  Bagaimana cara mengetahuinya? Mudah! Jika stack penuh, maka penunjuk akan bernilai max – 1, atau index paling terakhir.  Nilai max sebelumnya adalah 7, maka jika penunjuk bernilai 6 (max -1 ), berati stack itu penuh.

bool IsFull(){
     if(penunjuk == max-1)
       return true;
     else
       return false;
}

4. Push

Operasi push digunakan untuk memasukkan data kedalam stack /tumpukan.  Tapi sebelum data itu dimasukkan, harus dilakukan pengecekan terlebih dahulu apakah stack sudah penuh atau belum.  Karena kita tadi sudah membuat fungsi IsFull untuk mengecek penuh atau belum, maka kita hanya memanggil fungsi tadi.

Gambaran operasi PUSH

Untuk menambah data, penunjuk harus dirubah posisinya agar sesuai dengan index yang akan diisi data

void Push(){
if(IsFull()){
    cout<<"Tumpukan Sudah Penuh!";
    getch();
}else{
    penunjuk++; //merubah penunjuk ke nilai diatasnya, karena akan memasukkan nilai
    cout<<"Data yang akan dimasukkan dalam stack : ";
    cin>>data[penunjuk];
  }
}

Nah, fungsi IsFull tadi akan mengembalikan nilai bool (true / false), sehingga kita bisa langsung menggunakannya dalam percabangan.  Jika tumpukan belum penuh, maka data bisa di inputkan dalam tumpukan.  INGAT ! kita harus merubah posisi penunjuk terlebih dahulu dengan menambah 1, agar nilainya berubah sesuai dengan index.

5. POP

Operasi POP digunakan untuk mengambil data pada tumpukan paling atas.  Caranya cek terlebih dahulu, apakah stack ada isinya atau masih kosong. Kita tinggal memanggil fungsi IsEmpty yang sudah kita buat tadi.  Jika kosong maka akan ditampilkan keterangan bahwa stack masih kosong.  Tapi jika sudah ada isinya, maka akan ditampilkan isi dari stack dengan index paling atas, dengan menggunakan bantuan penunjuk.

void Pop(){
    if(IsEmpty()){
        cout<<"Stack Kosong ! ";
        getch();
    }else{
        cout<<"Data yang diambil adalah : "<<data[penunjuk];
        penunjuk--;  //merubah penunjuk menjadi nilai dibawahnya, karena data sudah diambil
        getch();
   }
}

INGAT ! setiap kali mengambil data paling atas, jangan lupa untuk merubah penunjuk menjadi nilai index dibawahnya, karena data sudah diambil.  Caranya dengan mengurangi dengan 1.

6. Clear

Operasi ini digunakan untuk mengosongkan stack, atau menghapus semua data dalam stack.  Cukup mudah, karena cukup merubah nilai penunjuk kembali menjadi -1 yang menandakan stack itu kosong.  Tidak usah dipikirkan data data yang masih ada, karena nantinya data data tersebut akan ditimpa dengan data yang baru.

void Clear(){
    penunjuk= -1;
    cout<<"Stack sudah dikosongkan ! ";
}

7. View

Operasi view digunakan untuk melihat data yang ada didalam stack.  Caranya menggunakan perulangan sebanyak jumlah data yang disimpan dalam stack.  Tidak perlu memakai fungsi lain seperti strlen, karena kita bisa menggunakan penunjuk sebagai variabel bantu hitung.  Tapi ingat, jangan lupa untuk mengecek apakah stack isi atau tidak menggunakan fungsi IsEmpty.

void View(){
    if(IsEmpty()){
         cout<<"Stack Kosong !";
    } else {
         for(int a=penunjuk;a>=0;a--){
           cout<<"Data pada tumpukan ke "<<a<<" : "<<data[a]<<endl;
         }
    }
}

Secara garis besar, pembuatan operasi – operasi pada stack sudah selesai, tinggal kita menyatukan kedalam fungsi main.  Ok, sekarang kita buat fungsi main nya.

main(){
int jawab;
do{
clrscr();
    cout<<"--------- Program Stack by adeethunix ------------"<<endl;
cout<<"1. Push "<<endl;
cout<<"2. Pop "<<endl;
cout<<"3. Clear "<<endl;
cout<<"4. View "<<endl;
cout<<"5. Exit "<<endl;
cin>>jawab;
switch(jawab){
case 1:
Push();break;
case 2:
Pop();break;
case 3:
Clear();break;
case 4:
View();break;
}
}while (jawab != 5);
}

Siiip….

udah hampir lengkap.  Bagi yang belum menambahkan header file silakan ditambahkan terlebih dahulu 🙂 .  Kalau ada yang mau ditanyakan silakan hubungi saya langsung atau tinggalkan komentar dibawah.  Maturnuwun ^^

CATATAN : Silakan kopi-paste asalkan sertakan sumbernya, okok^^

// created by : adeethunix
// http://masiyak.com

#include <conio>
#include <iostream>

int max=7;
int data[7];
int penunjuk=-1;

//membuat fungsi IsEmpty untuk mengecek stack kosong atau tidak
bool IsEmpty(){
if(penunjuk == -1)
return true;
else
return false;
}

//membuat fungsi IsFull untuk mengecek stack isi atau tidak
bool IsFull(){
if(penunjuk == max-1)
return true;
else
return false;
}

//membuat fungsi Push untuk memasukkan nilai kedalam stack yang sebelumnya dicek terlebih dahulu apakah penuh atau belum
void Push(){
if(IsFull()){
cout<<"Tumpukan Sudah Penuh!";
getch();
}else{
penunjuk++;
cout<<"Data yang akan dimasukkan dalam stack : ";
cin>>data[penunjuk];
}
}

//membuat fungsi Pop untuk mengambil nilai dari stack yang sebelumnya dicek terlebih dahulu apakah kosong atau belum
void Pop(){
if(IsEmpty()){
cout<<"Stack Kosong ! ";
getch();
}else{
cout<<"Data yang diambil adalah : "<<data[penunjuk];
penunjuk--;
getch();
}
}

//membuat fungsi Clear untuk menghapus data dalam stack
void Clear(){
penunjuk= -1;
cout<<"Stack sudah dikosongkan ! ";
}

//membuat fungsi untuk menampilkan isi dari stack
void View(){
for(int a=penunjuk;a>=0;a--){
cout<<"Data pada tumpukan ke "<<a<<" : "<<data[a]<<endl;
}
getch();
}

//fungsi utama
main(){
int jawab;
do{
clrscr();
cout<<"--------- Program Stack by adeethunix ------------"<<endl;
cout<<"1. Push "<<endl;
cout<<"2. Pop "<<endl;
cout<<"3. Clear "<<endl;
cout<<"4. View "<<endl;
cout<<"5. Exit "<<endl;
cout<<"Masukkan pilihan Anda : ";
cin>>jawab;
switch(jawab){
case 1:
Push();break;
case 2:
Pop();break;
case 3:
Clear();break;
case 4:
View();break;
}
}while (jawab != 5);
}

4 Comments

So, what do you think ?