Disusun untuk Memenuhi Mata Kuliah Praktikum Algoritma dan Struktur Data dibimbing oleh Bapak Aji Prasetya Wibawa.
UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK JURUSAN TEKNIK ELEKTRO S1 PENDIDIKAN TEKNIK INFORMATIKA maret, 2014
STACK A. TUJUAN Memahami terminologi yang terkait dengan struktur data stack Memahami operasi-operasi yang ada dalam stack Dapat mengidentifikasi permasalahan-permasalahan pemrograman yang harus diselesaikan dengan menggunakan stack, sekaligus menyelesaikannya B. Dasar Teori
A. Pengertian Stack Stack adalah sebuah kumpulan data dimana data yang diletakkan di atas data yang lain atau menggunakan konsep LIFO (Last In Fisrt Out). Dengan demikian, elemen terakhir yang disimpan dalam stack menjadi elemen pertama yang diambil. Dalam proses komputasi, untuk meletakkan sebuah elemen pada bagian atas dari stack, maka kita melakukan push dan untuk memindahkan dari tempat yang atas tersebut, kita melakukan pop.
Gambar 1.0 Ilustrasi Sebuah Stack Operasi push merupakan proses penyisipan/pemasukkan data ke dalam suatu tumpukan. Dimana tumpukkan tersebut akan dicek, apakah sudahpenuh atau belum. Jika sudah penuh, maka data tidak akan dimasukkan ke dalam tumpukkan, tetapi jika masih kosong maka data akan disisipkan di tumpukkan paling atas. Algoritma Operasi Push: If atas = maxelemen then penuh: true else (Tumpukan sudah penuh)
Operasi pop adalah operasi untuk menghapus elemen dengna yang terletak pada posisi paling atas dari sebuah tumpukan. Algoritma Operasi Pop: If atas = 0 then (Tumpukan sudah kosong) else Atas atas - 1 Endif (hapus 1 elemen pada tumpukan)
Gambar 2. Contoh Penggunaan Push dan POP Ada beberapa cara untuk menyajikan sebuah stack tergantung pada permasalahan yang akan kita selesaikan. Dalam bab ini kita akan menggunakan cara yang paling sederhana, tipe data yang sudah kita kenal, yaitu array. Kita dapat menggunakan array untuk menyajikan sebuah stack, dengan anggapan bahwa banyaknya elemen maksimum dari stack tersebut tidak akan melebihi batas maksimum banyaknya elemen dalam array.
Pada saat memberikan ukuran stack, kalau kita teruskan akan menambah data lagi, hingga terjadi overflow. Dengan demikian perlu data tambahan untuk mencatat posisi ujung stack. Dengan kebutuhan seperti ini, kita dapat menyajikan stack dengan menggunakan tipe data struktur (struct) yang terdiri dari dua field. Field pertama bertipe array untuk menyimpan elemen stack, medan kedua bertipe integer untuk mencatat posisi ujung stack. B. Operasi Stack pada Array a. Operasi data abstrak STACK
struct STACK {//Membuat jenis data abstrak 'STACK' int top; float data[5]; }stackbaru; float dta; }
void clear() {
bool isfull()//menanyakan : penuhkah ? { if(stackbaru.top ==maxstack) return true; else return false; } bool isempty(){//menanyakan:kosongkah? int main(){ }
stackbaru.top =-1;
inisialisasi(); char menu; char ulang; if(stackbaru.top==-1) return true; else return false; do{ system("cls"); printf("Menu :\n"); printf("\n 1. pop stack");
int push(float dta){//mengisi stack(menyimpan data di stack) if(isfull()==true){ puts("Maaf,stack penuh"); } else { stackbaru.top++; stackbaru.data[stackbaru.top]=dta; } }
printf("\n 2. push stack"); printf("\n 3. cetak"); printf("\n 4. bersihkan stack"); printf("\n 5. exit"); cout<<"\n Menu pilihan anda : "; cin>>menu;
yang
akan
printf("\n maaf stack penuh");} }else if(menu =='3') { print(); cout<<"Ulang?(y/t)"; cin>>ulang; } else if(menu=='4') { clear(); cout<<"Ulang?(y/t)"; cin>>ulang; }else if(menu=='5'){ exit(0); }
Output Program
Penjelasan program
1. Pada fungsi push kode if(isfull()==false) seharusnya if(isfull()==true) 2. Pada fungsi pop kode if(isempty()==false) seharusnya if(isempty()==true) 3. Pada kode awal nilai top tidak diinisialisasi dan untuk menginisialisasinya maka menggunakan kode : void inisialisasi(){ stackbaru.top=-1; } dan menaruh fungsi inisialisasi pada fungsi main.
Algoritma
a. Untuk memasukkan data, cek kondisi stack apakah masih ada tempat dalam array stack yang kosong b. Masukkan inputan ke dalam array stack c. Letakkan inputan pertama pada elemen ke-0 sampai elemen ke-n d. Tampilkan data stack e. Untuk mengambil data, cek kondisi stack dalam keadaan terdapat data f. Ambil inputan pada elemen terakhir
struct STACK //membuat jenis data abstrak stack { int top; char data[maxstack]; // pendeklarasian untuk
if (isfull() == false) // jika kondisi stack tidak penuh { stackbaru.top++;// user menginputkan data dengan menggunakan variabel adat dimana adat tersebut akan disimpan di stackbaru yang paling atas
stackbaru.data[stackbaru.top]=adat; // increment, yang bermksud jika penginputan adat lagi maka akan tersimpan diatas adat sebelumnnya
bool isfull()
dalam kondisi penuh (menggunakan boolean) { if (stackbaru.top == maxstack-1) return true; // jika pengkondisian stack dalam keadaan penuh maka benar else return false; } }
void pop() {
while (isempty() == false) // jika kondisi stack tidak bool isempty() // fungsi untuk mengetahui apakah stack kosong {
cout<<stackbaru.data[stackbaru.top];
//
akan
menampilkan data di stack dimana data tersebut berada yang paling atas stackbaru.top--; // decrement, maksudnya jika user memilih menu pop lagi maka rogam akan menampilkan data dibawah data yang telah terambiil sebelumnya
} }
//mencetak stack
cout<<" |Program pembalik kalimat dengan stack |"<<endl; cout<<" ======================================"<<e ndl; cout<<"\nInput Kalimat : "; for (int f=1; f<=stackbaru.top; f++) // diulang
void clear() { stackbaru.top = -1; } int main() { char word[150]; //menampung inputan cout<<"| program pembalik kata dengan stack |"<<endl; cout<<" ===================================="<<endl ; cout<<"\nMasukkan kalimat : "; gets(word); cout<<endl; for(int f=0; word[f]; f++) { push(word[f]); } print(); cout<<endl; cout<<"Dibalik menjadi : "; pop(); cout<<"\n";
Output Program:
Penjelasan Program
Menggunakan header file iostream yang berfungsi untuk cout dan cin, conio untuk getch, stdio.h File header ini merupakan singkatan dari standar input output. Jadi sudah jelas kalau perintah yang ada dijadikan sebagai standar input dan output. Contoh perintah : scanf, gets, printf, puts, putchar.
String adalah satu karakter (char) atau lebih dan memungkinkan untuk suatu program membaca tanda spasi.
Algoritma program praktikum a. b. c. d. e. f. g. h. i. j. k. l. Mulai Deklarasi header Deklarasi struct abstrak Deklarasi fungsi full Deklarasi fungsi empty Deklarasi fungsi push Deklarasi fungsi pop Deklarasi fungsi print Deklarasi fungsi clear Deklarasi fungsi main Tampilkan hasil selesai Tugas Rumah Nama Program : program stack 6 menu
stack_var[j].nilai=stack_var[j+1].nilai; stack_var[j+1].nilai=temp;
strcpy(temp_c,stack_var[j].nama);
strcpy(stack_var[j+1].nama,stack_var[j].nama);
strcpy(stack_var[j+1].nama,temp_c); } }
struct STACK // deklarasi struktur STACK // { int top; char nama[maxstack]; //variabel nama bertipe data string int nilai; //variabel nilai bertipe data integer }; struct STACK stack_var[10];
} print(); }
void print() //mencetak stack { cout<<"\nData :"; cout<<"\n+---------------------------+"; cout<<"\n| Nama | Nilai |";
stack_var[j].nilai=stack_var[j+1].nilai; stack_var[j+1].nilai=temp;
cout<<"\n+---------------------------+"; for (int i=stack_var[0].top; i>=0; i--) { cout<<"\n| "<<stack_var[i].nama<<" "<<stack_var[i].nilai<<" "<<" |"<<endl; |
strcpy(temp_c,stack_var[j].nama);
strcpy(stack_var[j+1].nama,stack_var[j].nama);
cout<<"+---------------------------+"; } strcpy(stack_var[j+1].nama,temp_c); } } }} void bubble_sort(){ int temp; char temp_c[maxstack]; for(int i=0;i<stack_var[0].top;i++){ for(int j=0;j<stack_var[0].top;j++){ if(stack_var[j].nilai>=stack_var[j+1].nilai){ temp=stack_var[j].nilai; } bool isfull() // fungsi boolean untuk mengecek apakah dalam kondisi penuh ? // { if (stack_var[0].top == maxstack-1) return true; else return false; }
bool isempty() // fungsi boolean untuk mengecek apakah dalam kondisi kosong ? // { if (stack_var[0].top == -1) return true; else return false; } void pop () { /* mengambil isi stack */ if (isempty()==true) { cout<<"Maaf, Stack Masih Kosong...!!\n"; } else { cout<<"Data yang terambil : \nNama : :
"<<stack_var[stack_var[0].top].nama<<"\nNilai void push() // mengisi stack // { if (isfull() == true) { cout << "\nMaaf Stack Penuh"; } else { stack_var[0].top++; do { data_sama=0; cout<<"\nNama\t: "; cin>>stack_var[stack_var[0].top].nama; for (int i=0;i<stack_var[0].top;i++) { if (stack_var[stack_var[0].top].nama==stack_var[i].nama) // jika ID dalam kondisi sama maka menampilkan sebuah statement */ { data_sama=1; cout<<"\nNama sudah di gunakan...!!\n\n"; cout<<"Tampilkan Data...?? (y/t)? "; cin>>tampil; if (tampil=='y'||tampil=='Y') { cout<<"Nama\t: "<<stack_var[i].nama<<"\nNilai : "<<stack_var[i].nilai<<endl; // menampilan ID yang sama */ }break; } } } while (data_sama==1); int main() { inisialisasi(); do { system("cls"); cout<<"| MENU STACK |\n"; } void inisialisasi() // karena dalam array di mulai pada indeks ke 0 { stack_var[0].top=-1; } void clear (){ // menghapus isi stack stack_var[0].top = -1; cout<<"Data Telah Kosong...!!\n\n"; } } "<<stack_var[stack_var[0].top].nilai<<endl; cout<<"Telah di ambil...!!\n\n"; stack_var[0].top--;
cout<<"----------------------------\n"; cout<<"| [1] Masukkan Data cout<<"| [2] Keluarkan Data cout<<"| [3] Kosongkan Data cout<<"| [4] Tampilkan Data cout<<"| [5] Urutkan Data cout<<"| [6] Keluar |\n"; |\n"; |\n"; |\n"; |\n"; |\n";
cin>>ulang; break;
default : cout<<"Maaf, Inputan Anda Salah!!\n\n"; cout<<"Kembali ke Menu Utama (y/t) ?";
case '2': pop(); cout<<"\n\nKembali ke Menu Utama (y/t) ?"; cin>>ulang; break; } }
cin>>ulang; break;
} while (ulang=='Y'||ulang=='y');
case '3': clear(); cout<<"\n\nKembali ke Menu Utama (y/t) ?"; cin>>ulang; break;
case '4': print(); cout<<"\n\nKembali ke Menu Utama (y/t) ?"; cin>>ulang; break;
case '5': cout<<"| 1. ascending |\n"; cout<<"| descending |\n"; cin>>pil; if(pil==1){ 2.
case '6': cout<<"\nterimakasih"; exit(0); cout<<"\n\nKembali ke Menu Utama (y/t) ?"; cin>>ulang; break;
Output Program:
Penjelasan Program:
program terdiri dari 6 menu menu pertama masukan data digunakan untuk meninputkan data kedalam stack dalam bentuk nama (char) dan nilai (int) maksimal data yang bisa dimasukan sebanyak 10 data menu keluarkan data digunakan untuk mengeluarkan data satu per satu dengan fungsi pop() menu kosongkan data digunakan untuk mengosongkan seluruh isi stack dengan fungsi clear() menu tampilkan data digunakan untuk menampilkan seluruh data stack yang telah diinputkan di menu 1 terdapat 2 cara pengurutan dalam menu 5, yaitu ascending dan descending dalam meng urutkan list data stack, disini menggunakan metode bubble sort, karena lebih simple dan mudah dipahami menu yang terakhir dalam program ini, digunakan untuk keluar dari program
algoritma program
1. mulai 2. deklarasi header 3. deklarasi define maxstack 10 4. deklarasi struct STACK 5. deklarasi fungsi print() 6. deklarasi fungsi bubblesort() ascending, dan fungsi bubblesort2() descending 7. deklarasi fungsi isfull() dan fungsi isempty() 8. deklarasi fungsi push() untuk memasukkan data ke stack 9. deklarasi fungsi pop() untuk mengeluarkan data dari stack 10. deklarasi fungsi clear() utk mengosongkan data seluruh stack 11. dan fungsi main(), fungsi utama dari program, agar fungsi-fungsi diatas dapat digunakan dan dipadukan sehingga membentuk program dan menggunakan operasi kondisi switch case
KESIMPULAN
Dalam proses komputasi, untuk meletakkan sebuah elemen pada bagian atas dari stack, maka kita melakukan push dan untuk memindahkan dari tempat yang atas tersebut, kita melakukan pop
Field pertama bertipe array untuk menyimpan elemen stack, medan kedua bertipe integer untuk mencatat posisi ujung stack.
DAFTAR PUSTAKA
Tim Asisten Dosen / Praktikum. 2013. Modul 4 STACK. Malang: Universitas Negeri Malang.