Kamis, 18 Mei 2017

Program Stack bahasa c++

            Assalamu’alaikum Wr, Wb, oke pada kesempatan kali ini saya akan membahas sebuah program yang bernama stack, stack ini merupakan sebuah tumpukan dan stack ini bersifat LIFO yaitu ( Last In Firs Out ) , contohnya seperti tumpukan piring saat akan mengambil piring maka piring paling atas ( terakhir dimasukan ) yang akan di ambil
            Oke Disini saya mempunyai beberapa contoh program stack, langsung saja tanpa berlama – lama kita masuk kecontoh pertama
Script Praktikum 8.1
#include <iostream.h>
#include <conio.h>
#define max 5

struct Tumpukan{
 int atas;
            int data[max];
            }T;

void awal(){
 T.atas=-1;
            }

int kosong(){
 if(T.atas==-1)
             return 1;
            else
             return 0;
                        }

int penuh(){
 if(T.atas==max-1)
             return 1;
            else
             return 0;
                        }


void input(int data){
 if(kosong()==1)
             {T.atas++;
                         T.data[T.atas]=data;
                         cout<<"Data "<<T.data[T.atas]<<" masuk ke stack";}
            else if(penuh()==0)
             {T.atas++;
                         T.data[T.atas]=data;
                         cout<<"Data "<<T.data[T.atas]<<" masuk ke stack";}

            else
                         cout<<"Tumpukan penuh";
            }

void hapus(){
            if(kosong()==0){
                        cout<<"Data teratas sudah terambil";
            T.atas--;
            }
            else
            cout<<"Data kosong";
            }

void tampil(){
 if(kosong()==0)
            {for(int i=T.atas;i>=0;i--)
             {cout<<"\nTumpukan ke "<<i<<"="<<T.data[i];}
                        }
            else
            cout<<"Tumpukan kosong";
            }

void bersih(){
 T.atas=-1;

cout<<"Tumpukan kosong!";
}

void main(){
int pil,data;
awal();
do
{
clrscr();
cout<<"1. Input\n2. Hapus\n3. Tampil\n4. Bersihkan\n5. Keluar\nMasukkan pilihan :";
cin>>pil;
switch(pil)
 {case 1:cout<<"Masukkan data = ";cin>>data;
                        input(data);
                                      break;
             case 2:hapus();
                         break;
             case 3:tampil();
                         break;
             case 4:bersih();
                         break;
             case 5: cout<<"Terimakasih, tekan enter untuk keluar";
             }
getch();     }
while(pil!=5);}


Hasil Running :

Pembahasan
            Program ini adalah contoh sebuah stack yang dimana di dalamnya terdapat operasi PUSH ( memasukan data ), POP ( menghapus data yang terakhir diinputkan ) Tampil ( Menampilkan isi tumpukan) CLEAR ( menghapus semua tumpukan ) dan exit. Hal pertama yang harus dilakukan adalah memilih dari ke 5 menu tersebut di mana setiap menu terdapat statemennya masing – masing dan stantemen itu terdapat dalam function.
            Operasi PUSH atau INPUT, dalam statement PUSH terdapat perintah if(kosong()==1) jadi jika tumpukan kosok maka kita akan menginput sebuah nilai yang nantnya akan ditampung atau ditumpuk dalam variable array data. Dan kondisi else if (penuh()==0) maka akan melakukan penginputan sekali lagi krn itu sbg pemberi tahu bahwa tumpukan hampir penuh
            Operasi POP atau Hapus dalam statement ini hampir sama yaitu terdapat kondisi if(kosong()==0) maksudnya adalah jadi tumpukan yang kosong itu tersisa 0 atau dianggapnya sudah penuh, dan function kosong itu mempunyai nilai 0 jika nilai T.atas lebih dari -1, dan mempunyai nilai satu jika T.atasnya itu -1, jadi selama nilai fungsi kosongnya bernilai 0 maka stack akan bisa di hapus dan juga dengan mengurangnya T.atas. misalnya t.atas = 5 jika di hapus maka tinggal 4 data yang tersisa, dan jika t.atas sudah mempunyai nilai 0 maka akan keluar notice Tumpukan Kosong.
            Operasi Tampilan atau VIEW untuk menampilkan stack LIFO maka hanya perlu dilakukan pemanggilan beserta perulangan for dan deremen, jadi jika menggunakan oprasi decremen maka yang akan keluar itu nilai yg terakhir diinputkan dan batasan dari perulangan nya adalah T.atas krn setiap melakukan penginputan nilai T.atas akan bertambah jd nilai T.atas menunjukan jumlah data dalam tumpukam  
Script Praktikum 8.2
#include<iostream.h>
#include<conio.h>
#include<string.h>
struct
{
char data [15][100], max[15];
int i,j;
}stack;
void push()
{
stack.i++;
cout<<" Masukan Data : ";
cin>>stack.max;
strcpy(stack.data[stack.i], stack.max);
}
void pop ()
{
if(stack.i>0)
{
cout<<" Data Yang Terambil : "<<stack.data[stack.i]<<endl;
stack.i--; stack.j--;
}
else
cout<<" Tak Ada Data Yang Terambil "<<endl;
}
void view(int n)
{
if(stack.j>0)
{
for(int e=n; e>=1; e--)
cout<<stack.data[e]<<endl;
}
else
{
cout<<" Tak Ada Data Tersimpan "<<endl;
}
}
void clear()
{
stack.j=0; stack.i=0;
}
void main()
{
int n, plh;
ayo:
clrscr();
cout<<" Contoh Program Stack [Tumpukan] \n\n ";
cout<<" Maksimal Tumpukan Data : "; cin>>n;
stack.data[n];
stack.i=0;
stack.j=0;
balik:
clrscr();
cout<<"\n 1. Push \n 2. Pop \n 3. View \n 4. Clear \n 5. Qiit \n";
cout<<"\n Pilih : "; cin>>plh;
cout<<endl;
if(plh==1)
{
if(stack.j<n)
{
stack.j++;
push();
}
else
{
cout<<" Tumpukan Penuh "<<endl;
getch();
}
goto balik;
}
else if(plh==2)
{
pop();
getch(); goto balik;
}
else if(plh==3)
{
view (stack.i);
getch(); goto balik;
}
else if(plh==4)
{
clear();
getch();
goto balik;
}
else if(plh==5)
{
getch(); goto ayo;
}
else
{
cout<<" Input Yang Anda Masukan Salah !!! "<<endl;
getch(); goto ayo;
}
}
Hasil Running

Pembahasan
            Program ini sama halnya dengan program sebelunya namun terdapat beberapa yang berbeda yaitu dalam program ini kita dapat menentukan batasan perulangan input dan output atau berapa maksimal tumpukan yang dapat diinputkan, dan dalam pemilihan menunya menggunakan if else dan menggunakan perulangan go to untuk kembali ke menu pemilihan .



Study Kasus Latihan 8.1
Konsep stack dilogikakan seperti sebuah tumpukan barang yang tersusun keatas dengan ketinggian tumpukan yang telah di tentukan, untuk mengilustrasikannya program dibawah ini.
Script Study Kasus Latihan 8.1
#include<conio.h>
#include<stdio.h>
#define N 20
main()
{
int nilai[N],i,jml;
printf(" Jumlah Maksimal Tumpukan (<=20) = ");
scanf("%d",&jml);
for(i=0; i<jml; i++)
{
printf(" Data ke-%d = ", i+1);
scanf("%d",&nilai[i]);
if(i==jml-1)
{
printf("Tumpukan Penuh");
getch();
}
}
for(i=jml-1; i>=0;i--)
{
printf("\n data ke-%d = %d", i+1, nilai[i]);
}
getch();
return 0;
}
Hasil Running

Pembahasan
            Ini adalah sebuah contoh program, pertama masukan jumlah tumpukan yang dapat di tampung dan maksimal tumpukan dibawah 20, karena data yang akan diinput akan di tampung dalam array maka lakukan penginputan dengan menggunakan for dan batasanya adalah nilai yang di inputkan pertama, masukan if dengan kondisi (i==jml-1) if ini berguna untuk memberitahu jika tumpukan suda penuh. Dan kondisi if i==jml-1 itu karena dalam array indeks pertama di hitung 0 dan batasan indeks itu adalah nilai dikurangi 1 jadi jika element arraynya 5 maka indeks terakhirnya 5-1=4. Untuk output gunakan for untuk outputnya namun i nya di dekremen kan (i--) karena stack ini mempunyai sifat LIFO ( last in first out ) jadi data yang di input terakhir akan keluar pertama.
Nah itulah beberapa program Stack dan juga pembahasan yang dapat saya sharing, semoga ilmu yang saya bagikan dapat bermanfaat bagi kalian semua para pembaca, mungkin sampai disini dulu sharing tentang pemrograman khususnya program Stack yang bisa saya posting. Dan Jangan lupa ya jika kalian mempunyai kritik dan saran silahkan tambahkan pada kolom komentar. Terima kasih atas kunjungan kalian.



2 komentar: