Langsung ke konten utama

STACK PADA PEMROGRAMAN C++


                                                                      

                                                                                STACK


      1.      Definisi Stack
Stack (tumpukan) merupakan sebuah cara dalam mengorganisasikan data – data yang dimiliki. Stack digunakan sebagai penyimpanan data didalam memori. Kaidah utama dalam stack adalah LIFO yang merupakan singkatan dari Last In First Out, artinya adalah data yang terakhir dimasukkan adalah data yang pertama kali akan diakses atau dikeluarkan.


       2.      Deklarasi stack
Sebuah struktur data dari sebuah stack setidaknya memiliki dua buah variabel, yaitu satu variabel yang akan digunakan sebagai penanda bagian atas tumpukkan dan array data yang akan menyimpan data – data yang dimasukkan kedalam stack. Berikut adalah syntax untuk mendeklarasikan struktur data dari sebuah stack :

struct nama_struct
{  int var1;
   int var2[max]
}stack;



Contoh :
struct tumpukkan
{  int atas;
   int isi[max]
}t;

     Dimana, nilai “max” didefinisikan sebagai jumlah tumpukan maksimum yang dapat disimpan dalam stack. Stack didefinisikan dengan array berukuran max, berarti benyaknya data yang dapat disimpan adalah sebanyak max yang nanti ditentukan ukurannya.

       3.Operasi – operasi dasar dalam stack
      A. createEmpty
Prosedur ini berfungsi untuk mengosongkan stack dengan cara meletakkan variabel1 ke posisi 0. Pendeklarasiannya adalah sebagai berikut :
Void createEmpty ()
{     
   t.atas=0;  
 }
       B. Push
Prosedur ini berfungsi untuk memasukkan nilai atau data kedalam stack. pendeklarasiannya adalah sebagai berikut :
Void push (int data)
{      t.atas++;
        t.data[t.atas]=data;
}
       C. Pop
Prosedur ini berfungsi untuk mengeluarkan/menghapus nilai terakhir atau nilai yang berada paling atas didalam stack. pendeklarasiannya adalah sebagai berikut:
void pop()
{
  t.atas = t.atas - 1;
}
      D. IsEmpty
Fungsi ini berfungsi untuk melakukan pengecekkan terhadap stack, apakah stack tersebut kosong atau tidak. Jika stack kosong artinya variabel atas pada posisi 0 atau stack tersebut tidak ada isinya maka fungsi akan mengembalikan nila 1 (true), namun jika sebaliknya fungsi akakn mengembalikan nilai 0 (false). Deklarasinya :
void isEmpty ()
{    if (t.atas == 0)
     return 1;
     else
            return 0;
}

       E. IsFull
Fungsi ini berfungsi untuk melakukan pengecekkan terhadap stack, apakah stack tersebut penuh  atau tidak. Jika stack penuh yang berarti variabel atas salam posisi max), maka fungsi akan mengembalikan nilai 1 (true), namun jika kebalikannya adakan mengembalikan nilai 0 (salah). Deklarasinya adalah :
void IsFull()
{
if (t.atas == max)
return 1;
else
return 0;
}

       4. Contoh Program Implementasi Stack
Berikut adalah contoh kode program yang mengimplementasikan konsep stack.
Contoh 1:
Pada program ini, user disuguhi beberapa menu utama yang akan dipilih. Menu pertama, “Cek kondisi stack” akan melakukan pengecekan terhadap kondisi stack. Menu kedua, “Tambah data” akan melakukan pengisian sebuah nilai ke dalam stack. Menu ketiga, “Keluarkan isi stack”, akan menampilkan semua isi stack dan akan mengosongkan stack. Menu keempat, “Kosongkan stack”, akan melakukan pengosongan stack, dan menu kelima, “Keluar”, akan menghentikan eksekusi program (selesai menggunakan program).
Input :
#include <iostream>
#include <stdlib.h>
#include<cstring>
#include<windows.h>
using namespace std;
struct tumpukan
{
      int top;
      char tmp[10][10];
}
tumpukan;
void push (char data[10]);
void pop();
void awal();
int isEmpty();
int isFull();
int main()
{
      int pilih;
      char data[10];
      string i;
      awal();
      do
{
      system("cls");
      cout<<"==================================="<<endl;
      cout<<"= CONTOH PROGRAM TUMPUKAN (STACK) ="<<endl;
      cout<<"==================================="<<endl<<endl;
      cout<<"=====Program Tumpukan Kijang======="<<endl;
      cout<<" 1. PUSH                          ="<<endl;
      cout<<" 2. POP                           ="<<endl;
      cout<<" 3. EXIT                          ="<<endl;
      cout<<"==================================="<<endl;
      if (!isEmpty())
      {
            for(int i=tumpukan.top; i>=0; i--)
            {
                  cout<<"["<<tumpukan.tmp[i]<<"]"<<endl;
            }
      }    
      else
      {
            cout<<"[tumpukan kijang dalam kondisi kosong]";
      }
      cout<<"\n Masukan Pilihan :";cin>>pilih;
      switch (pilih)
      {
            case 1:
                  cout<<"Masukan Kijang kedalam tumpukan :";cin>>data;
                  push(data);
                  break;
            case 2:
                  pop();
                  break;
            case 3:
                  cout<<"Tekan enter untuk keluar :";
                  break;
                  default:
                  cout<<"ERROR!";
                  break;
      }
}
while (pilih!=3);
}
void push (char data[10])
{
      if (!isFull())
{
      tumpukan.top=tumpukan.top+1; 
      strcpy(tumpukan.tmp[tumpukan.top],data);
}
else
cout<<"Kijang dalam tumpukan penuh";
}
void pop()
{
      if (!isEmpty())
{
      tumpukan.top--;
      cout<<"kijang pada tumpukan ke- "<< tumpukan.top+2<<"sudah diambil";
}
else
cout<<"Kijang dalam tumpukan kosong";
}
void awal()
{
      tumpukan.top= -1;
}
int isEmpty()
{
      if (tumpukan.top==-1)
      return 1;
      else
      return 0;
}
int isFull()
{
      if (tumpukan.top==10-1)
      return 1;
      else
      return 0;
}

Ouput




contoh program 
input
//header file
#include <iostream>
#include <conio.h>
#define maxstack 5
using namespace std; //untuk melegalkan header iostream
//pendeklarasian struct
struct STACK
{
      int top;
      float data[4];
};
float dta;

/*struct yang telah dibuat (STACK) dijadikan suatu Tipe data, dimana disebut tipe data abstrak*/
struct STACK stackbaru;

//fungsi boolean untuk mengetahui apakah stack penuh
bool isfull()
{
      if(stackbaru.top == maxstack)
            return true;
      else
            return false;
}

//fungsi boolean untuk mengetahui apakah stack kosong
bool isempty()
{
      if(stackbaru.top == -1)
            return true;
      else
            return false;
}

//fungsi untuk menambahkan data pada stack
void push(float dta)
{
     if(isfull() == true) /*panggil fungsi isempty(), jika kondisi benar pernyataan dijalankan*/
      {
            puts("Maaf, stack penuh");
      }
      else{
            stackbaru.top++;
            stackbaru.data[stackbaru.top]=dta;
      }
}

//fungsi untuk mengambil data pada stack
void pop()
{
      if(isempty() == true) //panggil fungsi isempty(), jika kondisi benar pernyataan dijalankan
      {
            cout<<"Data telah kosong!";
      }
      else
      {
            cout<<"Data yang terambil : " <<stackbaru.data[stackbaru.top]<<endl;
            stackbaru.top--;
      }
}

//fungsi untuk mencetak data pada stack
void print()
{
      printf("\nData yang terdapat dalam stack : \n");
      printf("--------------------------------\n");
      for(int i=0; i<=stackbaru.top; i++)
      {
            cout<<stackbaru.data[i]<<"    ";
      }
}

//fungsi untuk membersihkan data dalam stack
void clear()
{
      stackbaru.top = -1;
      printf("\nSekarang stack kosong");
}

//fungsi utama
int main()
{
      stackbaru.top = -1;
      //pendeklarasian variabel
      char menu;
      char ulang;
      //perulangan dengan do-while
      do
      {
            system("cls");
            printf("\t PROGRAM STACK\n");
            printf("\t===============\n");
            printf("Menu : ");
            puts("\n1. Pop stack");
            puts("2. Push stack");
            puts("3. Cetak");
            puts("4. Bersihkan stack");
            puts("5. Exit");
           
            cout<<"Menu pilihan Anda : ";
            cin>>menu;
           
            if(menu == '1')
            {
                  pop(); //panggil fungsi pop()
                  ulang = 'y';
                  getch();
            }
            else if(menu == '2')
            {
                  cout<<"\nTambah Data";
                  cout<<"\n-----------";
                  cout<<"\nData yang akan disimpan di stack : ";
                  cin>>dta;
                 push(dta); /*panggil fungsi push(dta)--dta sesuai dengan data ynag diinput*/
                  ulang = 'y';
            }
            else if(menu == '3')
            {
                  print(); /*panggil fungsi untuk mencetak data dalam stack*/
                  cout<<"\n\nUlang ? (y/t)";
                  cin>>ulang;
            }
            else if(menu == '4')
            {
                  clear(); //panggil fungsi untuk membersihkan stack
                  cout<<"\n\nUlang ? (y/t)";
                  cin>>ulang;
            }
            else if(menu == '5')
            {
                  exit(0); //keluar dari program
            }
       }while(ulang == 'Y' || ulang == 'y'); /*akan selalu diulang ketika ulang == 'y' || ulang'Y'*/

Penjelasan dan Algoritma: 
1) Pada awalnya dibuat sebuah struct ‘struct STACK’, kemudian struct stack dijadikan menjadi sebuah tipe data dari variabel stackbaru.  Dan beberapa prototype fungsi diantaranya :
·         void clear()
·         void print()
·         void pop()
·         void push(float dta)
·         bool isempty()
·         bool isfull()

2) Masuk ke fungsi main, deklarasikan variabel. Kemudian masuk ke perulangan do-while dengan kondisi ketika ulang == ‘y’ || ulang ‘Y’.Pada perulangan ini akan ditampilkan beberapa menu pilihan yang dapat dipilih oleh user :

                printf("Menu : ");
  puts("\n1. Pop stack");
  puts("2. Push stack");
  puts("3. Cetak");
  puts("4. Bersihkan stack");
  puts("5. Exit");
/*note = puts(put string), kegunaannya sama dengan printf ataupun cout, hanya saja yang dicetak hanyalah berupa STRING.*/


3)  Jika input user== ‘1’ maka program akan menjalankan seluruh pernyataan yang ada pada kondisi pertama,   pop(); //panggil fungsi pop()

Fungsi POP :
             void pop()
{
    if(isempty() == true) //panggil                          fungsi isempty(), jika kondisi benar pernyataan dijalankan
    {
       cout<<"Data telah kosong!";
    }
    else
    {
       cout<<"Data yang terambil : " <<stackbaru.data[stackbaru.top]<<endl;
       stackbaru.top--;
    }
       }

     Pertama kali yang akan dilakukan program adalah mengecheck apakah stack dalam keadaan kosong, jika benar maka akan tercetak string pada layar “Data telah kosong!" . Jika bernilai false maka data pada posisi teratas akan diambil, dan kemudian nilai stackbaru.top didecrement sehingga posisi teratas pada stack berganti dengan data dibawah top sebelumnya.
                              ulang = 'y';
Setelah fungsi pop() dijalankan, selanjutnya variabel ulang disetel dengan Nilai ‘y’ Sehingga setelah memilih menu pop() program akan secara otomatis mengulangi prosesnya. 
          getch(); //akan meminta input dari keyboard sehingga akan menghentikan 
                                        program sementara sampai adanya input keyboard.
4) Jika input user == ‘2’, maka pernyataan yang berada di dalam kondisi ke dua akan dijalankan. Saat masuk dalam pernyataan pada kondisi kedua maka akan tercetak String pada layar dan kemudian user diminta untuk mengisikan data yang akan ditambahkan dalam tumpukan stack.

cout<<"\nTambah Data";
                     cout<<"\n-----------";
                     cout<<"\nData yang akan disimpan di stack : ";
                     cin>>dta;

        Data yang telah diinputkan disimpan dalam memori, dan digunakan untuk  pemanggilan fungsi push(data).
 push(dta); /*panggil fungsi push(dta)--dta sesuai dengan data ynag diinput*/

Fungsi PUSH :
void push(float dta)
{
       if(isfull() == true) /*panggil fungsi isempty(), jika kondisi benar pernyataan dijalankan*/
{
   puts("Maaf, stack penuh");
}
else{
   stackbaru.top++;
   stackbaru.data[stackbaru.top]=dta;
}
 }

           Pertama kali akan dicek apakah stack dalam keadaan penuh, jika true maka akan tercetak string pada layar “Maaf, stack penuh”. Jika bernilai salah maka stackbaru.top akan diincrement kemudian data yang tadi diinputkan ditambahkan pada stack.    
                             ulang = 'y';
Setelah fungsi push() dijalankan, selanjutnya variabel ulang disetel dengan Nilai ‘y’ Sehingga setelah memilih menu push() program akan secara otomatis mengulangi prosesnya. 
5)  Jika input user==’3’, maka program akan menjalankan seluruh pernyataan yang berada di dalam kondisi ketiga. 
           print(); /*panggil fungsi untuk mencetak data dalam stack*/
Fungsi PRINT :
             printf("\nData yang terdapat dalam stack : \n");
printf("--------------------------------\n");
for(int i=0; i<=stackbaru.top; i++)
{
      cout<<stackbaru.data[i]<<"    ";
       }

         Dengan memanfaatkan perulangan for, fungsi ini akan mencetak seluruh data yang berada di dalam stack.
       cout<<"\n\nUlang ? (y/t)";
       cin>>ulang;

Setelah data tercetak pada layar, selanjutnya akan ditampilkan string “Ulang ?(y/n)”. Jika input user adalah ‘y’ || ‘Y’ maka program akan dijalankan lagi mulai awal (diulang), tapi jika input user == ‘n’ ||’N’ maka akan keluar dari perulangan dan selanjutnya keluar dari program.

6) Jika Input user == ‘4’, maka seluruh pernyataan yang berada dalam kondisi keempat akan dijalankan.
             clear(); //panggil fungsi untuk membersihkan stack

Fungsi CLEAR :
            void clear()
      {
   stackbaru.top = -1;  
   printf("\nSekarang stack kosong");
}

          Saat fungsi ini dipanggil maka posisi stackbaru.top diinisialisasi beraada pada -1. Seperti halnya mereset ulang suatu stack yang membuat isinya akan hilang.

 cout<<"\n\nUlang ? (y/t)";

 cin>>ulang;

Setelah data dalam stack dibersihkan, selanjutnya akan ditampilkan string “Ulang ?(y/n)”. Jika input user adalah ‘y’ || ‘Y’ maka program akan dijalankan lagi mulai awal (diulang), tapi jika input user == ‘n’ ||’N’ maka akan keluar dari perulangan dan selanjutnya keluar dari program.

7) Jika input user ==’5’ maka pernyataan yang berada pada kondisi kelima kan dijalankan   
                                   exit(0);
           Pernyataan diatas digunakan untuk keluar dari program. Jadi jika kita memilih menu 5 maka kita akan keluar dari program.


***Penjelasan fungsi boolean isfull() dan bool isempty()***

//fungsi boolean untuk mengetahui apakah stack penuh
bool isfull()
{
      if(stackbaru.top == maxstack)
            return true;
      else
            return false;
}

      Untuk mengetahui apakah suatu stack sedang penuh adalah dengan membandingkan stackbaru.top dengan maxstack, jika kondisi benar maka stack dalam posisi penuh, dan sebaliknya.
//fungsi boolean untuk mengetahui apakah stack kosong
bool isempty()
{
      if(stackbaru.top == -1)
            return true;
      else
            return false;
}
      Untuk mengetahui apakah suatu stack dalam keadaan kosong adalah dengan membandingkan stackbaru.top dengan -1, jika kondisi benar maka stack dalam posisi kosong, dan sebaliknya.
OUTPUT :
Push stack (5,6,7)
  PROGRAM STACK
       =============
Menu :
1. Pop stack
2. Push stack
3. Cetak
4. Bersihkan stack
5. Exit
Menu pilihan Anda : 2

Tambah Data
-----------
Data yang akan disimpan di stack : 5
      
 PROGRAM STACK
       =============
Menu :
1. Pop stack
2. Push stack
3. Cetak
4. Bersihkan stack
5. Exit
Menu pilihan Anda : 2

Tambah Data
-----------
Data yang akan disimpan di stack : 6
  
PROGRAM STACK
   =============
Menu :
1. Pop stack
2. Push stack
3. Cetak
4. Bersihkan stack
5. Exit
Menu pilihan Anda : 2

Tambah Data
-----------
Data yang akan disimpan di stack : 7

Pop stack
PROGRAM STACK
=============
Menu :
1. Pop stack
2. Push stack
3. Cetak
4. Bersihkan stack
5. Exit
Menu pilihan Anda : 1
Data yang terambil : 7

Cetak stack
 PROGRAM STACK
=============
Menu :
1. Pop stack
2. Push stack
3. Cetak
4. Bersihkan stack
5. Exit
Menu pilihan Anda : 3

Data yang terdapat dalam stack :
--------------------------------
  5  6
Ulang ? (y/t)

                                            DAFTAR PUSAKA
                http://www.nblognlife.com/2014/04/stack-pada-c.html

                                                                             

Komentar

Postingan populer dari blog ini

ALGORITMA DAN PEMOGRAMAN2

SEARCING 1.       Linked List   Secara umum search dapat diartikan mencari data dengan cara menelusuri tempat penyimpanan data tersebut. Tempat penyimpanan data dalam memory dapat berupa array atau dapat juga dalam bentuk Linked List. Pencarian dapat dilakukan terhadap data yang secara keseluruhan berada dalam memory komputer ataupun terhadap data yang berada dalam penyimpanan eksternal (hard disk). 2.       Pengertian Searching Searching adalah mencari data yang dibutuhkan. Searching dalam pemrograman bisa dilakukan untuk mencari data yang ada di dalam memory komputer, dalam kehidupan sehari-hari kita juga sering melakukan kegiatan searching seperti mencari data/informasi yang ada dalam internet. Terdapat beberapa metode yang dapat digunakan untuk searching , ada yang dinamakan: ·   Sequential Search ·   Binary Search 3.       Sequential Search Sequential Search merupakan metode pencarian data dalam array dengan cara membandingkan data yang dicari den

QUEUE/ANTRIAN PADA PEMROGRAMAN C++

                                                              QUEUE/ANTRIAN  penjelasan queue/ antrian kaidah utama dalam konsep queue adalah fifo yang merupakan singkatan dari first in first out, artinya adalah data yang pertama kali dimasukkan atau disimpan, maka datatersebut adalah yang pertama kali akan diakses atau dikeluarkan. Analoginya sama dengan antrian di sebuah loket pembelian tiket kereta, orang yang lebih dahulu, maka akan dilayani terlebih dahulu, dan akan selesai lebih dulu dari orang-orang yang datang setelahnya. Gambar dibawah ini mengilustrasikan kerja sebuah queue.               operasi- operasi sebagai berikut    1. enqueue memasukan data ke dalam antrian  2. dequeue mengeluarkan data terdepan dari antrian  3. clear menghapus seluruh antrian   4. isempty memeriksa apakah antrian kosong  5. isfull memeriksa apakah antrian penuh   Deklarasi queue dalam program         sebuah queue di dalam program komputer dideklarasikan sebagai sebu

STRUCT ARRAY PADA PEMROGRAMAN C++

                                                            STRUCT ARRAY Setiap tipe data dapat dibuat dalam bentuk array. Begitu juga dengan tipe data yang dibuat dengan perintah struct. Contoh program di bawah ini dapat menjelaskan cara penggunaan array yang bertipe data buatan. Berikut contoh Program Sederhana ‘array di dalam struct’. Disini saya menggunakan tools Borland C++ . Script : /*contoh program sederhana ‘array di dalam struct’*/ #include “stdio.h” #include “conio.h” #include “string.h” #define maks 3 struct TMhs { char NIM[9]; char Nama[21]; int NilaiUTS,NilaiUAS,NilaiQuis; float NilaiAkhir; char index; }; main () { TMhs mhs[maks]; int i; for(i=0;i<maks;i++) { printf(“Pengisian Data Mahasiswa Ke-%i \n”, i+1); printf(“NIM : “);fflush(stdin);gets(mhs[i].NIM); printf(“NAMA : “);fflush(stdin);gets(mhs[i].Nama); printf(“Nilai Quiz : “);scanf(“%d”,&mhs[i].NilaiQuis); printf(“Nilai UTS : “);scanf(“%d”,