Anda di halaman 1dari 8

#include<stdio.

h> void push(); void pop(); void show(); void clear(); void ambil(); void main() { int n; printf("Masukkan banyak tumpukan : "); scanf("%d",&n); int stack[n],a,pil,nilai; a=-1; do { printf("Menu :\n\t1. Push\n\t2. Pop\n\t3. Show\n\t4. Clear\n\t5. Ambil Data\n\t6. Keluar\n Ketik Pilihan : "); scanf("%d",&pil); system("cls"); if(pil==1) { push(stack,&a,n); system("cls"); } else if(pil==2) { pop(stack,&a); system("cls"); } else if(pil==3) { show(stack,&a); getch(); system("cls"); } else if(pil==4) { clear(&a); } else if(pil==5) { ambil(stack,&a,n); }

}while(pil!=6); } void ambil(int stack[],int *top,int n)

{ int nilai,flag=0,k=-1,temp[n]; if(*top<=-1) { printf("Tidak ada data\n"); } else { printf("Masukkan Nilai Yang Ingin Diambil : "); scanf("%d",&nilai); while(*top>-1) { if(stack[*top]==nilai) { *top=*top-1; flag=flag+1; } else { k=k+1; temp[k]=stack[*top]; *top=*top-1; } } while (k>-1) { *top=*top+1; stack[*top]=temp[k]; k=k-1; } if(flag==0) { system("cls"); printf("\nData yang ingin diambil tidak ada"); getch(); system("cls"); } }

} void clear(int *top) { *top=-1; system("cls"); printf("Semua Data Terhapus"); getch(); system("cls");

} void show(int stack[],int *top) { int i; system("cls"); if(*top<0) printf("Maaf, Tidak Ada Data\n"); else { for(i=*top;i>=0;i--) { printf("%d\n",stack[i]); } } getch(); system("cls"); } void pop(int stack[],int *top) { if(*top==-1) { printf("\n\nTumpukan Kosong\n"); } else { printf("\nNilai Data %d dikeluarkan",stack[*top]); *top=*top-1; } getch(); } void push(int stack[],int *top,int n) { int nilai; if(*top<n-1) { printf("Masukkan Nilai : "); scanf("%d",&nilai); *top=*top+1; stack[*top]=nilai; } else { printf("Stack Penuh\n"); getch(); } }

void push(int stack[],int *top,int n) { int nilai; if(*top<n-1) { printf("Masukkan Nilai : "); scanf("%d",&nilai); *top=*top+1; stack[*top]=nilai; } else { printf("Stack Penuh\n"); getch(); } }

Fungsi ini digunakan untuk menambah data pada stack : fungsi push ini memiliki parameter variabel array, nilai top dan nilai maks. Awalnya dilakukan pengecekan apakah ruang pada stack masih tersedia atau tidak. Kondisi yang di cek apakah nilai top kurang dari nilai maks-1. Apabila tidak memenuhi, ini berarti stack yang ingin diisi telah penuh. Apabila masih tersedia ruang pada stack,user langsung diminta untuk menginput nilai yang akan dimasukkan dalam stack. Kemudian nilai top akan diincremen yang menandakan data yang terakhir ditambah disorot oleh pointer top.

void pop(int stack[],int *top) { if(*top==-1) { printf("\n\nTumpukan Kosong\n"); } else { printf("\nNilai Data %d dikeluarkan",stack[*top]); *top=*top-1; } getch(); }

Fungsi ini digunakan untuk mengambil data pada top: Terlebih dahulu dilakukan pengecekan pada stack tersebut. Stack kosong atau berisi ditandai dengan nilai top = -1. Jika kondisi tersebut memenuhi, akan dicetak keterangan stack kosong. Apabila tidak memenuhi, program akan mempop elemen stack paling atas dengan memindahkan nilai top ke elemen berikutnya. Dan elemen sebelumnya dianggap tidak ikut menjadi elemen dalam stack lagi. Untuk menandai proses tersebut, akan dicetak keterangan.

void clear(int *top) { *top=-1; system("cls"); printf("Semua Data Terhapus"); getch(); system("cls");

Fungsi ini digunakan untuk menghapus semua data yang terdapat pada stack : Fungsi ini cukup sederhana, proses penghapusan seluruh data dalam stack ini hanya dengan mendefinisikan nilai top dengan -1. Hal ini sama artinya dengan tidak ada data pada stack tersebut. Namun memang pada kenyataannya data masih tersimpan pada memory.

void ambil(int stack[],int *top,int n) { int nilai,flag=0,k=-1,temp[n]; if(*top<=-1) { printf("Tidak ada data\n"); } else { printf("Masukkan Nilai Yang Ingin Diambil : "); scanf("%d",&nilai); while(*top>-1) { if(stack[*top]==nilai) { *top=*top-1; flag=flag+1; } else { k=k+1; temp[k]=stack[*top]; *top=*top-1; } } while (k>-1) { *top=*top+1; stack[*top]=temp[k]; k=k-1; } if(flag==0) { system("cls"); printf("\nData yang ingin diambil tidak ada"); getch(); system("cls"); } }

Penjelasann fungsi void ambildata: Fungsi ini digunakan untuk mengambil suatu angka yang ada pada stack. Awalnya dilakukan pengecekan apakah terdapat data atau tidak pada stack bersangkutan. Jika tidak, akan dicetak keterangan. Dan jika terdapat data, maka proses akan berlanjut. User akan diminta untuk mencari sebuah nilai yang akan dihapus dari stack yang ada. Setelah user memasukan angka yang ingin diambil, maka program akan mencari angka tersebut mulai dari top hingga mencapai angka stack paling bawah dengan metose perulangan. Mulai dari top, apabila bukan angka yang dicari, maka angka pada top dipindahkan ke sebuah stack temporer. Namun jika nilai top sama dengan angka yang dicari maka angka tersebut dikeluarkan, dan dilanjutkan pencarian angka selanjutnya. Jika pada saat pencarian, nilai bilangan yang dicari sama dengan nilai top pada stack, maka akan dilakukan increment variabel flag. Variabel ini menandakan bahwa nilai yang dicari oleh user ada pada salah satu elemen stack. Sementara bila nilai flag ini sama dengan 0, ini menandakan bahwa nilai yang dicari oleh user tidak ada. Setelah mencapai angka stack paling bawah, maka angka-angka pada stack temporer dikembalikan ke stack utama, dan angka yang diinput user tadi sudah dikeluarkan.

void show(int stack[],int *top) { int i; system("cls"); if(*top<0) printf("Maaf, Tidak Ada Data\n"); else { for(i=*top;i>=0;i--) { printf("%d\n",stack[i]); } } getch(); system("cls"); }

Fungsi ini berguna untuk menampilkan data-data yang terdapat dalam stack :

Fungsi ini memiliki parameter variabel stack bertipe array dan nilai top. Pertama-tama sistem akan mengecek apakah terdapat data pada stack atau tidak. Jika terdapat data maka akan dilakukan pencetakan data mulai dari data paling atas hingga paling bawah.