laporan 4 ASD stack (TUMPUKAN)

LAPORAN PRAKTIKUM IV

  

Disusun untuk Memenuhi Matakuliah Praktikum Algoritma dan Struktur Data

Dibimbing oleh Bpk. Aji Prasetya

Oleh:

  

Ananda Putri Syaviri

130533608243

S1 PTI’13 OFF B

  

UNIVERSITAS NEGERI MALANG

FAKULTAS TEKNIK

JURUSAN TEKNIK ELEKTRO

PRODI PENDIDIKAN TEKNIK INFORMATIKA

Maret 2014

  

STACK

a) Tujuan

  1. Memahami terminologi yang terkait dengan struktur data stack

  2. Memahami operasi-operasi yang ada dalam stack

  3. Dapat mengidentifikasi permasalahan-permasalahan pemrograman yang harus diselesaikan dengan menggunakan stack, sekaligus menyelesaikannya.

b) Dasar Teori Pengertian Stack

  Stack adalah sebuah kumpulan data dimana data yang diletakkan di atas data yang lain. Dengan demikian stack adalah struktur data yang menggunakan konsep LIFO. 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. 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 ukuran stack, kalau kita teruskan menambah data lagi, akan 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.

  Operasi Pada Stack Operasi-operasi Dasar pada stack adalah sebagai berikut: 1. Operasi data abstrak STACK .

  2. Fungsi yang melakukan pengecekan apakah stack dalam kondisi kosong .

  3. Fungsi yang melakukan pengecekan apakah stack dalam kondisi penuh .

  4. Fungsi untuk menghapus seluruh stack.

  5. Fungsi untuk mencetak isi stack.

c) LATIHAN(PERCOBAAN): Percobaan 1 Algoritma dan Struktur Data Nama Program : Program Troubleshooting Program STACK.

  Bahasa Pemrogramam : C++ Compiler : Code Blocks Script program :

  Script yang benar :

  #include <iostream> #include <conio.h> #include <windows.h> #include <stdio.h> #define maxstack 5 using namespace std; struct STACK { int top; float data[4]; }; float dta; struct STACK stackbaru; void inisialisasi() //menginisialisasi top = -1 { stackbaru.top = -1; } bool isfull(){ if (stackbaru.top==maxstack-1) return true; else return false; } bool isempty(){ if (stackbaru.top==-1)return true; else return false; } void push(float dta){ if (isfull()== true){ puts("Maaf, stack penuh"); getch(); } else { stackbaru.top++; stackbaru.data[stackbaru.top]=dta; }

  } void pop(){ if (isempty()==true){ cout<<"Data telah kosong!"; }else { cout<<"data yang terambil : " <<stackbaru.data[stackbaru.top] <<endl; stackbaru.top--;} } void print(){ for (int i=0; i<=stackbaru.top; i++){ cout <<stackbaru.data[i] <<" "; } } void clear (){ stackbaru.top = -1; } int main() { inisialisasi(); //pemanggilan fungsi inisialisasi char menu; char uulang; do { system("cls"); printf("Menu:\n"); puts("1. 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(); getch(); uulang = 'y';

  } else if(menu == '2') { cout<<"Data yang akan disimpan di stack : "; cin>>dta; push(dta); uulang = 'y';

  } else if(menu == '3') { print(); cout<<"Ulang? (y/t) "; cin>>uulang;

  } else if(menu == '4') { clear(); cout<<"Ulang? (y/t) "; cin>>uulang;

  } else if(menu == '5') { exit(0); }

  } while(uulang == 'Y' || uulang == 'y'); }

  Output Program :

  Algoritma : 1. Mulai.

  2. Membaca file header.

  3. Membaca fungsi struct STACK.

  4. Membaca tipe data integer top, float data yang berisikan array dengan elemen berjumlah 4 (float data [4]).

  5. Membaca tipe data float dta.

  6. Membaca fungsi struct STACK stackbaru.

  7. Membaca fungsi inisialisasi.

  8. Membaca fungsi bool isfull.

  9. Membaca fungsi bool isempty.

  10. Membaca fungsi push(float dta) 11. Membaca fungsi pop.

  12. Membaca fungsi print ( untuk mencetak data ).

  13. Membaca fungsi clear (untuk menghapus/ mengosongkan data).

  14. Membaca fungsi utama.

  15. Pemanggilan fungsi inisialisasi.

  16. Membaca tipe data charr menu dan uulang.

  17. Membaca pemanggilan percabangan do-while, yand didalamnya terdapat pilihan menu dengan menggunakan perulangan if else.

  18. Jika 1 maka pemanggilan fungsi pop dan uulang berfungsi.

  19. Jika 2 maka fungsi push dan uulang, serta inputan data yang akan disimpan.

  20. Jika 3 maka fungsi print dan uulang.

  21. Jika 4 maka fungsi clear dan uulang.

  22. Jika 5 maka fungsi exit (keluar).

  23. Cetak hasil.

  24. Selesai.

  Deskripsi: Pada program ini menggunakan 4 file header. Penggunaan logika Boolean pada fungsi pop dan push harus benar , jika tidak maka program saat dijalankan akan error(outputnya tidak akan keluar dengan benar/ sesuai dengan yang ditargetkan). Penulisan fungsi pop dan push perlu diperhatikan. Untuk menjalankan setiap menu yang disediakan menggunakan percabangan do- while dengan perulangan if else.

  Menu 1 apabila memilih pop maka fungsi pop akan berfungsi mulai menjalankan logika Boolean yang ada pada deklarasi fungsi pop. Jika benar maka data telah kosong jika salah maka data yang terambil diambl dengan pembacaan fungsi stackbaru.data[stackbaru.top]. Menu 2 apabila memilih menu push, maka fungsi push akan berfungsi, jika logika Boolean benar maka stack, penuh jika tidak maka akan berfungsi “stackbaru.top++; stackbaru.data[stackbaru.top]=dta;”.

d) TUGAS RUMAH(sekaligus TUGAS PRAKTIKUM).

  

Tugas Rumah 1

Algoritma dan Struktur Data

Nama Program : Program membalikkan kata . Bahasa Pemrogramam : C++ Compiler : Code Blocks. Script program :

  //http://mahfuzm.blogspot.com/2011/04/program-stack-c.html //header #include <iostream> #include <stdio.h> #include <stdlib.h> #include <conio.h> #define maxstack 50 using namespace std; struct STACK //membuat jenis data abstrak 'STACK' { int top; char data[maxstack]; }; char dta[maxstack]; struct STACK stackbaru; void inisialisasi() { stackbaru.top = -1; } bool isfull() //menanyakan penuhkah? { if (stackbaru.top == maxstack-1) return true; else return false; } bool isempty() //menanyakan kosongkah? { if (stackbaru.top == -1) return true; else return false; } void push(char dta) //mengisi stack (menyiapkan data) { if (isfull() == false) { stackbaru.top++; stackbaru.data[stackbaru.top]=dta; } else { puts ("\nMaaf Stack penuh"); } } void pop() //mengambil isi stack { while (isempty() == false) { cout<<stackbaru.data[stackbaru.top]; stackbaru.top--; } } void print() //mencetak stack { cout<<"\nKalimat awal : "; for (int i=0; i<=stackbaru.top; i++) {

  } } void clear() { stackbaru.top = -1; } int main() { char kata[50]; //menampung inputan printf("Program Pembalik Kalimat \n\n"); printf("*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*\n"); printf("Masukkan kalimat yang Anda inginkan: \n"); gets(kata); for(int i=0; kata[i]; i++) push(kata[i]); print(); cout<<"\n*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*\n\n"; cout<<"Balikan dari kalimat Anda : "; pop(); cout<<"\n";

  }

  OutProgram : Algoritma :

  1. Mulai.

  2. Membaca file header.

  3. Membaca fungsi struct STACK 4. Membaca tipe data integer top dan char data[maxstack].

  5. Membaca tipe data char dta[maxstack] .

  6. Membaca fungsi struct STACK stackbaru.

  7. Membaca fungsi inisialisasi.

  8. Membaca fungsi bool isfull.

  9. Membaca fungsi bool isempty.

  10. Membaca fungsi push(char dta).

  11. Membaca fungsi pop.

  12. Membaca fungsi print.

  13. Membaca fungsi clear.

  14. Membaca fungsi utama.

  15. Membaca tipe data char kata [50].

  16. Inputtan kalimat yang diinginkan.

  17. Cetak hasil.

  18. Membaca fungsi gets(kata) yang berfungsi untuk membaca spasi.

  19. Membaca perulangan for.

  20. Pemanggilan fungsi push(kata[i]).

  21. Pemanggilan fungsi print.

  22. Inputan hasil balikkan kalimat.

  23. Pemanggilan fungsi pop.

  24. Cetak hasil.

  25. Selesai.

  Deklarasi : Program diatas merupaka program yang berfungsi membalikkan kalimat dengan memanfaatkan fungsi- fungsi dalam stack. Penggunaan fungsi operasi-operasi dasar dari stack , kemudia penggunaan tipe data char kata[50] yang berfungsi menampung kalimat yang akan dibalik sebanyak 50 elemen yang tersedia. Kemudian penggunaan gets(kata) yang befungsi agar spasi saat inputan kalimat dapat terbaca. Penggunaan fungsi perulangan for yang digunakan untuk membalikkan kata , yaitu :

  for(int i=0; kata[i]; i++) push(kata[i]);

  

Tugas Rumah 2

Algoritma dan Struktur Data

Nama Program :

  Program Menu Stack dengan menganalisis pemunculan data yang sama.

  Bahasa Pemrogramam : C++ Compiler : Code Blocks. Script program :

  #include <iostream> #include <string.h>

  #include <stdlib.h> #define maxstack 10 using namespace std; char pilih,tampil,ulang; int data_sama; struct STACK /* deklarasi struktur STACK */ { int top; int id[maxstack]; string nama[maxstack]; }stack_var; bool isfull() /* fungsi boolean untuk mengecek apakah dalam kondisi penuh ? */ { if (stack_var.top == maxstack-1) return true; else return false; } bool isempty() /* fungsi boolean untuk mengecek apakah dalam kondisi kosong ? */ { if (stack_var.top == -1) return true; else return false; } void push() /* mengisi stack */ { if (isfull() == true) { cout << "\nMaaf Stack Penuh"; } else { stack_var.top++; do { data_sama=0; cin>>stack_var.id[stack_var.top]; for (int i=0;i<stack_var.top;i++) { if (stack_var.id[stack_var.top]==stack_var.id[i]) /* jika ID dalam kondisi sama maka menampilkan sebuah statement */ { data_sama=1; cout<<"\nID sudah di gunakan...!!\n\n"; cout<<"Tampilkan Data...?? (y/t)? "; cin>>tampil; if (tampil=='y'||tampil=='Y') { cout<<"ID : "<<stack_var.id[i]<<"\nNama : "<<stack_var.nama[i]<<endl; /* menampilan ID yang sama */ }break; } } } while (data_sama==1); cout<<"\n Nama : "; cin>>stack_var.nama[stack_var.top]; } } void pop () { /* mengambil isi stack */ if (isempty()==true) { cout<<"Maaf, Stack Masih Kosong...!!\n"; } else { cout<<"Data yang terambil : \nID : "<<stack_var.id[stack_var.top]<<"\nNama : "<<stack_var.nama[stack_var.top]<<endl; cout<<"Telah di Ambil...!!\n\n"; stack_var.top--; } } void print() /* mencetak stack */ { cout<<"\nData :"; cout<<"\n| ID | Nama |"; for (int i=stack_var.top; i>=0; i--) {

cout<<"\n| "<<stack_var.id[i]<<" | "<<stack_var.nama[i]<<" "<<"|"<<endl; cout<<"+----------------------+"; } } void clear (){ /* menghapus isi stack */ stack_var.top = -1; cout<<"Data Telah Kosong...!!\n\n"; } void inisialisasi() /* karena dalam array di mulai pada indeks ke 0

  • / { stack_var.top=-1; } int main() { inisialisasi(); do { system("cls"); cout<<"\n\n"; cout<<" | ++ MENU STACK ++ |\n"; cout<<" |==========================|\n"; cout<<" | 1. Masukkan Data |\n"; cout<<" | 2. Keluarkan Data |\n"; cout<<" | 3. Kosongkan Data |\n"; cout<<" | 4. Tampilkan Data |\n"; cout<<" | 5. Keluar |\n\n"; cout<<"Pilih : ";cin>>pilih; switch(pilih) {

  case '1': push(); cout<<"\n\nMenu Utama (y/t) ?"; cin>>ulang; break; pop(); cout<<"\n\nMenu Utama (y/t) ?"; cin>>ulang; break; case '3': clear(); cout<<"\n\nMenu Utama (y/t) ?"; cin>>ulang; break; case '4': print(); cout<<"\n\nMenu Utama (y/t) ?"; cin>>ulang; break; case '5': cout<<"\t\t\tThanks You \n"; exit(0); cout<<"\n\nMenu Utama (y/t) ?"; cin>>ulang; break; default : cout<<"Maaf yang Anda Input Salah...!!\n\n"; cout<<"Menu Utama (y/t) ?"; cin>>ulang; break; } } while (ulang=='Y'||ulang=='y');

  }

  OutProgram :

  Algoritma : 1. Mulai.

  2. Membaca file header.

  3. Membaca tipe data char pilih, tampil, ulang.

  4. Membaca integer data_sama.

  5. Membaca deklarasi fungsi struct STACK.

  6. Membaca integer top, id[maxstack], string nama[maxstack].

  7. Membaca stack_var.

  

8. Membaca fungsi bool isfull, bool isempty, push, pop, print, clear, dan inisialisasi.

  9. Membaca fungsi utama.

  10. Membaca pemanggilan inisialisasi.

  11. Membaca perulangan do-while.

  12. Inputan menu stack.

  13. Menu 1 : pemanggilan fungsi push.

  Menu 2 : pemanggilan fungsi pop. Menu 3 : pemanggilan fungsi clear. Menu 4 : pemanggilan fungsi print. Menu 5 : pemanggilan fungsi exit (keluar). Menu default jika menu yang diinputkan tidak sesuia dari yang ditentukan.

  14. Cetak hasil.

  15. Selesai.

  Deklarasi : Dalam program ini untuk memunculkan data id yang telah digunakan menggunakan

fungsi stack_var;. bool isfull untuk mengecek apakah dalam stack dalam kondisi penuh , bool

isempty untuk mengecek apakah dalam kondisi kosong. Fungsi push yang digunakan untuk

mengisi stack tersebut. Penggunaan logika true/false yang perlu diperhatikan. Jika kondisi

benar maka inputan yang keluar adalah pemberitahuan bahwa stack benar penuh, jika tidak

maka pemanggilan fungsi stack_var.top++;. Fungsi pop untuk mengambil isi stack, jika logika

benar maka muncul inputan “maaf, stack masih kosong”, jika logika salah maka data yang

terambil sebelumnya akan muncul, menggunakan fungsi stack_var.id[stack_var.top].

  Fungsi print untuk mencetak stack. Fungsi clear untuk menghapus isi stack dengan menggunakan ketentuan fungsi stack_var.top= -1.

e) KESIMPULAN

  1) Stack adalah kumpulan data yang diletakkan bertumpuk dengan data lainnya sehingga disebut tumpukan data. 2) Ada 5 operasi dasar pada stack: (1) data abstrak STACK (2) bool isfull (3) bool isempty (4) clear (5) print. 3) Ada 2 operasi paling dasar dari stack yaitu : (1) pop (2) push. 4) Operasi push yaitu operasi menambahkan elemen data pada urutan terakhir (paling atas). 5) Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir dari stack.

  6) Bool isfull berfungsi untuk mengecek stack dalam kondisi penuh. 7) Bool isempty berfungsi untuk mengecek stack dalam kondisi kosong. 8) Clear berfungsi untuk menghapus stack. 9) Print berfungsi mencetak stack.

f) DAFTAR RUJUKAN

1. Tim Asisten Dosen. 2014. Modul 2 Sorting (Pengurutan). Malang: Unversitas Negeri Malang.

  2.