Sabtu, 09 Maret 2019

Posted by Milda Hayati on 03.57 with No comments

Pengertian STACK

Stack atau yang artinya tumpukan merupakan sekelompok elemen-elemen yang disimpan dalam satu linier. Stack adalah tipe data abstrak yang digunakan pada seluruh pemrograman komputer. Stack memiliki konsep yaitu LIFO (Last In First Out) yang artinya data yang diletakkan pertama kali akan menjadi data yang terakhir dan data yang diletakkan terakhir kali akan menjadi data yang pertama kali dimasukkan. Jika digambarkan dalam dunia nyata misalnya tumpukan piring yang akan dicuci, akan ditumpuk dari atas kebawah, kemudian piring yang pertama kali ditumpuk akan menjadi piring yang terakhir dicuci dan piring yang terakhir ditumpuk akan menjadi piring yang pertama untuk dicuci.  

Operasi Dasar STACK

Ada 2 operasi dasar pada stack yaitu: 

1. Operasi Push 

Operasi Push yaitu operasi untuk menambahkan elemen pada  urutan yang paling akhir(atas).
Langkah-langkah operasi stack yaitu:
a. Memeriksa tumpukan apakah penuh atau tidak
b. Jika tumpukan penuh dan tak ada ruang untuk memasukkan data, maka cukup tampilkan pesan bahwa tumpukan sudah penuh.
c. Jika tumpukan tidak penuh dan masih ada ruang, maka tambahkan satu nilai pada tumpukan atas (top) untuk menunjukkan ke ruang kosong selanjutnya.
d. Tambahkan data pada ruang kosong yang ditunjukan oleh top
Contoh potongan program operasi push
If (top < n-1)
                { top = top + 1;
                    S[top] = x;
                }
Else
    Cout<<”stack Penuh”;

2. Operasi Pop 

Operasi Pop yaitu operasi untuk mengambil elemen data  pada urutan terakhir dan menghapus elemen tersebut dari stack.
Langkah-langkah operasi pop yaitu:
a. Memeriksa tumpukan apakah kosong atau tidak
b. Jika tumpukan kosong dan sudah tidak ada data untuk dihapus, maka cukup tampilkan pesan bahwa tumpukan kosong.
c. Jika tumpukan tidak kosong, maka akses data yang paling atas (top).
d.Kemudian kurangi nilai dengan petunjuk dari top
Contoh potongan program operasi pop
If (top > -1)
                { x = S[top];
                    Top= top-1;
                }
Else
    Cout<<”stack kosong”
 

Program STACK

1.  Untuk mendeklarasikan program stack pada c++, dibutuhkan 3 metode yaitu fungsi push( );, pop( );, dan printStack( ); untuk menampilkan data yang ditumpukkan.
2. Selain fungsi diatas, buat 2 fungsi opsional untuk mengecek apakah tumpukan kosong isEmpty( ) dan tumpukan penuh isFull( ).
3. Untuk menyimpan data dapat menggunakan empety array dengan maksimum array yang akan didefinisikan sebagai maksimum tumpukan.
4. Agar data tumpukkan terstruktur kita bisa menggunakan struct sehingga mudah mengakses data top dan array data seperti sebuah object.
5. Karena merupakan program konsole maka juga akan dibuat fungsi main( ).

Kode Program STACK

1. Preprocessor dan Headerfile

Untuk stack, preprocessor yang digunakan adalah dua baris untuk mendefinisikan header file iostream untuk standar input/output dan MAX untuk maksimum data array pada stack.

#include <iostream>
#define MAX 10
using namespace std; 

2. Struct data

Struct digunakan untuk mendeklarasikan top untuk menujukan data teratas pada tumpukan array data[] dengan jumlah array dari data maksimum yang didefinisikan sebelumnya.

//Deklarasi struct tumpukan
struct Stack {
 int top, data[MAX];
}Tumpukan; 

3. Inisialisasi nilai top

Untuk memastikan petunjuk top berada di posisi indeks ke 0  saat menambahkan data ke tumpukan maka perlu diberi nilai aal yaitu -1.

void init(){
 Tumpukan.top = -1;
}

4. Memeriksa tumpukan

Untuk memeriksa tumpukan apakah penuh isFull( ) dan tumpukan kosong isEmpty( ), keduanya mengembalikan nilai boolean, maka kita cukup mengembalikan nilai perbandingan pada fungsi masing-masing.

bool isEmpty() {
  return Tumpukan.top == -1;
}

bool isFull() {
 return Tumpukan.top == MAX-1;
}

1. Fungsi isEmpty( ) akan mengembalikan nilai true jika Tumpukan.top sama dengan -1 atau false jika tidak sama.
2. Fungsi isFull( ) akan mengembalikan nilai true jika Tumpukan.top sama dengan nilai mak data array yang telah dikurang satu tau false jika tidak sama.

5.  Menambahkan data ke tumpukan

Untuk emnambahkan data hal pertama yang harus dilakukan adalah memeriksa apakah tujuan tumpukan penuh atau tidak. Jika penuh, maka kita tidak dapat menambah data karena tidak ada lagi ruang yang tersedia. jika masih ada ruang maka tambahkan nilai Tumpukan.top dengan 1. Kemudian masukkan data ke ruang yang dtunjukkan.

void push() {
   if (isFull()) {
  cout << "\nTumpukan penuh"<<endl;
 }
 else {
    Tumpukan.top++;
    cout << "\nMasukkan data = "; cin >> Tumpukan.data[Tumpukan.top];
    cout << "Data " << Tumpukan.data[Tumpukan.top] << " masuk ke stack"<<endl;
 }
}

6. Mengambil data ke tumpukan

Sebelum mengambil data, kita perlu memeriksa apakah data yang akan diambil kosong atau tidak. Jika tumpukan kosong maka cukup tampilkan pesan bahwa tidak ada data pada tumpukan. Jika ada data pada tumpukan maka tampilkan data dengan mengambil data teratas dari teratas dari tumpukan dan menghapus data tersebut dengan mengurangi nilai top.

void pop() {
 if (isEmpty()) {
  cout << "\nData kosong\n"<<endl;
 }
 else {
    cout << "\nData "<<Tumpukan.data[Tumpukan.top]<<" sudah terambil"<<endl;
    Tumpukan.top--;
 }
}

7. Menampilkan data pada tumpukan

Sama seperti mengambil data dari tumpukan, kita juga perlu memeriksa apakah tumpukan kosong atau tidak. Jika tidak ada data di tumpukan maka tampilkan pesan bahwa tumpukan kosong dan jika masih ada data maka tampilkanlah data satu per satu dari tumpukan dengan menggunakan perulangan.

void printStack() {
 if (isEmpty()) {
  cout << "Tumpukan kosong";
 }
 else {
    cout << "\nTumpukan : ";
  for (int i = Tumpukan.top; i >= 0; i--)
   cout << Tumpukan.data[i] << ((i == 0) ? "" : ",");
 }
}

8.  Menampilkan menu

Setelah setelah data, variabel dan fungsi telah dideklarasikan dan diinisialisasikan, kemudian buatlah menu dengan do...while dengan switch di dalamnya. Sebelum menampilkan menu, tampilkanlah data yang ada pada stack menggunakan printStack( ).
Selanjutnya tampilkan pilihan menu, jika user memilih pilihan pertama maka jelaskan fungsi push( ) dan pilihan kedua untuk menjalankan fungsi pop( ). Selama pilihan user tidak 3 yaitu fungsi printStack( ) maka menu akan terus ditampilkan. Jika user memlih pilihan ketiga maka while akan berhenti untuk menampilkan menu dan menutup aplikasi.

int main() {
 int pilihan;
 init();
 do {
    printStack();
  cout << "\n1. Input (Push)\n"
        <<"2. Hapus (Pop)\n"
        <<"3. Keluar\n"
        <<"Masukkan Pilihan: ";
  cin >> pilihan;
  switch (pilihan)
  {
  case 1:
   push();
   break;
  case 2:
   pop();
   break;
  default:
      cout << "Pilihan tidak tersedia" << endl;
   break;
  }
 } while (pilihan!=3);
}

Full Code

#include <iostream>
#define MAX 10
using namespace std;
struct Stack {
  int top, data[MAX];
} Tumpukan;
void init() {
  Tumpukan.top = -1;
}
bool isEmpty() {
  return Tumpukan.top == -1;
}
bool isFull() {
  return Tumpukan.top == MAX - 1;
}
void push() {
  if (isFull()) {
    cout << "\nTumpukan penuh" << endl;
  } else {
    Tumpukan.top++;
    cout << "\nMasukkan data = ";
    cin >> Tumpukan.data[Tumpukan.top];
    cout << "Data " << Tumpukan.data[Tumpukan.top] << " masuk ke stack"
       << endl;
  }
}
void pop() {
  if (isEmpty()) {
    cout << "\nData kosong\n" << endl;
  } else {
    cout << "\nData " << Tumpukan.data[Tumpukan.top] << " sudah terambil"
       << endl;
    Tumpukan.top--;
  }
}
void printStack() {
  if (isEmpty()) {
    cout << "Tumpukan kosong";
  } else {
    cout << "\nTumpukan : ";
    for (int i = Tumpukan.top; i >= 0; i--)
      cout << Tumpukan.data[i] << ((i == 0) ? "" : ",");
  }
}
int main() {
  int pilihan, data;
  init();
  do {
    printStack();
    cout << "\n1. Input (Push)\n"
       << "2. Hapus (Pop)\n"
       << "3. Keluar\n"
       << "Masukkan Pilihan: ";
    cin >> pilihan;
    switch (pilihan) {
    case 1:
      push();
      break;
    case 2:
      pop();
      break;
    default:
      cout << "Pilihan tidak tersedia" << endl;
      break;
    }
  } while (pilihan != 3);
}

Output:
     

Referensi:

http://www.klikartikel.com/2014/12/mengenal-stack-pada-c.html
https://bekti.net/blog/implementasi-stack-di-cpp/ 
http://belajar-pemrograman-new.blogspot.com/p/stack.html

0 komentar:

Posting Komentar

Popular Posts

Recent Posts

Pages

Text Widget

Diberdayakan oleh Blogger.

About Me

Milda Hayati
Lihat profil lengkapku

Featured Post

Konfigurasi IP Table/ Firewell

Followers

Author Details

Hey there, We are Blossom Themes! We are trying to provide you the new way to look and use the blogger templates. Our designers are working hard and pushing the boundaries of possibilities to widen the horizon of the regular templates and provide high quality blogger templates to all hardworking bloggers!

Blogger templates

3/recentposts

Blogroll

Pages

Blogger templates

Blogroll

Blogroll

Popular Posts

Popular Posts

Copyright © MILDA HAYATI | Powered By Blogger | Published By Gooyaabi Templates
Design by Carolina Nymark | Blogger Theme by NewBloggerThemes.com