LAPORAN PRAKTIKUM IV
STACK(TUMPUKAN)
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
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
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 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;
}
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;
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'); }
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:
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;
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 :
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 <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| "<<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');
}
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].
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.