Anda di halaman 1dari 15

LAPORAN MODUL IV PRAKTIKUM ALGORITMA dan STRUKTUR DATA

Disusun Untuk Memenuhi Matakuliah Praktikum Basis Data Yang Dibimbing oleh Bapak Didik Dwi Prasetya

Disusun oleh Wildan Setyo Budi (120533430884)

UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK JURUSAN TEKNIK ELEKTRO S1 PENDIDIKAN TEKNIK INFORMATIKA
FEBRUARI 2013

MODUL IV 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.

Gambar 3.1 Ilustrasi Sebuah 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

4. Fungsi yang melakukan pengecekan apakah stack dalam kondisi

3. Fungsi untuk menghapus seluruh

5. Fungsi untuk mencetak isi stack

C. LATIHAN Troubleshooting Program STACK SYNTAX


/* ALGORITMA PROGRAM STACK 1. muncul menu 2. inputan berupa angka untuk memilih menu yang tersedia 3. jika menginputkan angka 1 maka memilih pop stack 4. jika menginputkan angka 2 maka memilih push stack 5. jika menginputkan angka 3 maka memilih print 6. jika menginputkan angka 4 maka memilih clear 7. jika menginputkan angka 5 maka memilih exit 8. pada setiap akhir fungsi akan kembali ke menu pilihan keculi jika menekan inputan angka 5. */ #include <iostream> //header #define maxstack 5 using namespace std; struct STACK{ //deklarasi struct stack int top; float data[4]; }; float dta; //deklarasi dta struct STACK stackbaru; //delarsi struct stackbaru bool isfull(){ //fungsi menanyakan sudah penuh if(stackbaru.top == maxstack-1) return true; else return false; } bool isempty(){ //fungsi menanyakan apakah kosong if(stackbaru.top == -1) return true; else return false; } void push(float data){//fungsi push atau memasukkan data dalam stack

if(isfull() == true){ puts("Maaf, Stack penuh"); } else { stackbaru.top++; stackbaru.data[stackbaru.top] = dta; } } void pop(){ //fungsi pop atau mengambil nilai teratas dari stack if(isempty() == true){ cout << "Data telah kosong"; } else { cout << "Data yang terambil : " << stackbaru.data[stackbaru.top] << endl; stackbaru.top--; } } void print(){ //fungsi untuk mencetak nilai stack for(int i = 0; i <= stackbaru.top; i++){ cout << stackbaru.data[i] << " "; } } void clear(){ //menghapus data yang berda pada stack stackbaru.top = -1; puts("Data selesai dikosongkan. ."); } void inisialisasi(){ //fungsi inisialisasi untuk mengatur nilai dari array stack stackbaru.top = -1; } //============================================================ int main(){ //fungsi utama inisialisasi(); //memanggil fungsi inisialisasi char menu; //deklarasi menu char uulang; //deklarsi uulang do{ //perintah kembali dari d0-whille 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; //input pilihan menu if(menu == '1'){ //jika inputan bernilai 1 maka memanggil fungsi pop pop(); uulang = 'y'; } else if (menu == '2'){ memanggil fungsi push

//jika inputan bernilai 2 maka

cout << "data yang akan disimpan di stack : "; cin >> dta; push(dta); uulang = 'y'; } else if(menu == '3'){ //jika inputan bernilai 3 maka memanggil fungsi print print(); cout << "Ulang? (y/t)"; cin >> uulang; } else if(menu == '4'){ //jika inputan bernilai 4 maka memanggil fungsi clear clear(); cout << "Ulang? (y/t)"; cin >> uulang; } else if(menu == '5'){ //jika inputan bernilai 5 maka memanggil fungsi exit exit(0); } }while (uulang == 'Y' || uulang == 'y'); }

PRINTSCREEN Tampilan menu

Push stack

Pop stack

Clear atau membersihkan stack

Exit

PENJELASAN #include <iostream> #define maxstack 5 using namespace std; struct STACK{ int top; float data[4];}; float dta; struct STACK stackbaru; Pendeklarasian header agar input output bisa digunakan, selain itu kita juga mendefinisikan maxstack bernilai 5 Pendeklarasian struct stack yang berisi top yang bertipe integer dan array data yang memiliki kapasitas 4. Diluar stack terdapat juga pendeklarsain dta yang bertipe floating point, dan tidak lupa pendeklarsian struct satck stackbaru Fungsi isfull digunakan untuk menanyakan apakah nilai teratas dari stack sudah sama dengan

bool isfull(){ if(stackbaru.top == maxstack) return true;

else return false;} bool isempty(){ if(stackbaru.top == -1) return true; else return false;}

void push(float data){ if(isfull() == true){ puts("Maaf, Stack penuh"); } 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 inisialisasi(){ stackbaru.top = -1;}

maxstack, jika ia maka akan bernilai true jika tidak maka akan bernilai false. Fungsi isempty digunakan untuk menanyakanapakah dalam stack bernilai -1 yang berarti stack sedang berda dalam keadaan kosong, jika ia maka akan bernialai true. Jika tidak maka bernilai false. Fungsi push digunakan untuk memasukkan data dalm sebuah array stack. Jika nilai sudah penuh maka akan dimunculkan tulisan berupa maaf tulisan sudah penuh kemunculan tulisan ini dideteksi dengan cara menanyakan ke fungsi bool isfull jika true maka benar bahwa nilai stack sudah penuh dan jika seblaiknya maka data stack akan trus di diisikan. Sampai satck penuh. Fungsi pop digunakan untuk megnambil mengambil nilai stack yang berada pada posisi paling atas. Fungsi ini akan berkerja dengan cara : jika data yang berada pada stack masih tersedia, maka data yang berada paling atas akan ditampilkan dan indek pada array pada stack akan dikurangi. Jika data sudah kosong maka akan ditampilkan tulisan data telah kosong, untuk mengetahui data sudah kosong program menanyakan ke fungsi bool is empty. Fungsi print berfungsi untuk mencetak data yang berada pada array stackbaru.data dengan bantuan dari perulangan for. rentang dari perulangan for yang digunakan mulai dari 0 sampai dengan stack baru.top. Fungsi inisialisasi ini berguna untuk mengatur array masukan pada fungsi push. Pada kondisi stack belum penuh, terdapat stackbaru.top++; untuk

int main(){ inisialisasi(); char menu; char uulang; do{ 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(); 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'); }

mengatasinya maka stackbaru.top dikurangi -1 sehingga setelah terjadi stackbaru.top++; maka indek yang akan dimasuki data pada posisi ke 0. Fungsi utama Pada awal fungsi utama langsung memanggil fungsi inisialisasi. Pendeklarsian menu dan uulang yang bertipe character. Sebagai batas perulangan dari do-while Tampilan tulisan menu-menu yang bisa dipilih

Muncul tulisan untuk memasukkan pilhan yang ingin dipilih. Inputan berupa angka 1 sampai 5.nilai ini akan masuk ke variabel menu Jika pilihan yang dipilih 1, maka akan memanggil fungsi pop(). Dan jika ingin mengulang maka tekan huruf y. Jika pilihan yang dipilih 2, maka user akan memasukkan inputan ke stack uang kan disimpan dalam dta. Dan kemudian memanggil fungsi push(dta).jika ingin mengulang maka tekan huruf y. Jika pilihan yang dipilih 3, maka akan memanggil fungsi print(). Dan jika ingin mengulang maka tekan huruf y. Jika pilihan yang dipilih 4, maka akan memanggil fungsi clear(). Dan jika ingin mengulang maka tekan huruf y. Jika pilihan yang dipilih 5, maka akan keluar dari program. Terjadi perulangan while. Jika syarat terpenuhi maka akan mengulang pada pernyataan do{.

D. TUGAS TUGAS 1 SYNTAX


#include <stdio.h> int max = 0; struct STACK{ int top; int data[0]; }; STACK stackbaru; void push(int data){ stackbaru.top++; stackbaru.data[stackbaru.top] = data; } void urutkan(int Array[],int Size){ int i, j, kecil, temp; for(i = 0; i < Size; i++){ kecil = i; for(j = i; j < Size; j++){ if(Array[kecil] > Array[j]) {kecil = j;} } temp = Array[i]; Array[i] = Array[kecil]; Array[kecil] = temp; } for(int k =0; k < Size; k++){ push(Array[k]); } } int main(){ stackbaru.top = -1; printf("Jumlah data = "); scanf("%d", &max); int data[max]; printf("masukan data: \n"); for(int i = 0;i < max; i++){ printf("data ke-%i = ", i+1); scanf("%d", &data[i]); } urutkan(data,max); printf("Setelah diurutkan : \n"); for(int j = 0; j < max; j++){ printf("%d, ", stackbaru.data[j]); } }

PRINTSCREEN

ANALISIS
#include <stdio.h> int max = 0; struct STACK{ int top; int data[0];}; STACK stackbaru; void push(int data){ stackbaru.top++; stackbaru.data[stackbaru.top] = data;} void urutkan(int Array[], int Size){ int i, j, kecil, temp; for(i = 0; i < Size; i++){ kecil = i; for(j = i; j < Size; j++){ if(Array[kecil] > Array[j]) {kecil = j;}} temp = Array[i]; Array[i] = Array[kecil]; Array[kecil] = temp;} for(int k =0; k < Size; k++){ push(Array[k]);}} int main(){ stackbaru.top = -1; int data[max]; printf("Jumlah data = "); scanf("%d", &max); printf("masukan data: \n"); Header fungsi input output printf dan scanf Pendeklarasian variabel max yang bernilai 0 Deklarsi struct STACK yang berisi variabel top dan array data yang ber index 0 Pebdefinisian stackbaru Fungsi push digunakan untuk memasukkan array data dalam sebuah array stackbaru.top

Fungsi urutkan Pendeklarasian i, j, kecil, temp yang bertipe integer Membandingkan nilai nilai yang berada pada pada array array, jika nilai dari index sebelah kiri lebih besar dari index sebelah kanan maka terjadi penukaran tempat dengan syntax tukar Syntax untuk menukar nilai dari nilai-nilai dalam array array Memasukkan nilai dari array array yang telah dirutkan kedalam stack dengan cara memanggil fungsi push Fungsi utama Inisialisasi stack, berfungsi untuk mengatur masukan dalam array Pendeklarasian array data Memunculksan tulisan jumlah data yang merupakan perintah bagi user untuk memasukkan batasan dari array yang di inginkan. Penampilan tulisan masukkan data, ynag memberikan perintah bagi user untuk menginputkan data dalam array data. Perulangan for untuk menampilkan data yang keberapa yang akan di inputkan user, lalu nilai masukan akan

for(int i = 0;i < max; i++){ printf("data ke-%i = ", i+1);

scanf("%d", &data[i]);} urutkan(data,max);

printf("Setelah diurutkan : \n"); for(int j = 0; j < max; j++){ printf("%d, ", stackbaru.data[j]);}}

masuk ke array data Setelah data masuk ke array data, setelah itu data yang berada di dalam array data akan diurukan dengan cara memanggil fungsi urut. Menampilkan tulisan stelah data diurutkan Perulangan for untuk menampilkan indek ke j dari array stackbaru.data

TUGAS 2 SYNTAX
#include <iostream.h> #include <stdio.h> #include <stdlib.h> #define maxstack 200 struct STACK{ int top; char data[maxstack]; }; char dta[maxstack]; struct STACK stackbaru; void inisialisasi(){ 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(char dta){ if (isfull() == false) { stackbaru.top++; stackbaru.data[stackbaru.top]=dta; }else { puts ("\nMaaf Stack penuh"); } } void pop(){ while (isempty() == false){ cout<<stackbaru.data[stackbaru.top]; stackbaru.top--; }

} void print(){ cout<<"\nKalimat awal : "; for (int i=0; i<=stackbaru.top; i++){ cout<<stackbaru.data[i]; } } int main() { char kata[200]; //menampung inputan cout<<"=======================================\n"; cout<<" Program Pembalik Kalimat \n"; cout<<"=======================================\n"; cout<<"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"; }

PRINTSCREEN

ANALISIS #include <iostream.h> #include <stdio.h> #include <stdlib.h> #define maxstack 200 struct STACK{ int top; float data[4];}; float dta; Pendeklarasian header agar input output bisa digunakan,header pengaturan tampilan bisa berfungsi selain itu kita juga mendefinisikan maxstack bernilai 200 Pendeklarasian struct stack yang berisi top yang bertipe integer dan array data yang memiliki kapasitas 4. Diluar stack terdapat juga pendeklarsain dta yang bertipe floating point,

struct STACK stackbaru; bool isfull(){ if(stackbaru.top == maxstack) return true; else return false;} bool isempty(){ if(stackbaru.top == -1) return true; else return false;} void push(float data){ if(isfull() == true){ puts("Maaf, Stack penuh"); } 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] << " ";}} int main(){ char kata[200]; cout<<"================\n"; cout<<"Program Pembalik Kalimat \n"; cout<<"==============\n"; cout<<"Masukkan kalimat yang Anda inginkan: \n"; gets(kata); for(int i=0; kata[i]; i++) push(kata[i]); print(); cout<<"\n--------------\n\n";

dan tidak lupa pendeklarsian struct satck stackbaru Fungsi isfull digunakan untuk menanyakan apakah nilai teratas dari stack sudah sama dengan maxstack, jika ia maka akan bernilai true jika tidak maka akan bernilai false. Fungsi isempty digunakan untuk menanyakanapakah dalam stack bernilai -1 yang berarti stack sedang berda dalam keadaan kosong, jika ia maka akan bernialai true. Jika tidak maka bernilai false. Fungsi push digunakan untuk memasukkan data dalm sebuah array stack. Jika nilai sudah penuh maka akan dimunculkan tulisan berupa maaf tulisan sudah penuh kemunculan tulisan ini dideteksi dengan cara menanyakan ke fungsi bool isfull jika true maka benar bahwa nilai stack sudah penuh dan jika seblaiknya maka data stack akan trus di diisikan. Sampai satck penuh. Fungsi pop digunakan untuk megnambil mengambil nilai stack yang berada pada posisi paling atas. Fungsi ini akan berkerja dengan cara : jika data yang berada pada stack masih tersedia, maka data yang berada paling atas akan ditampilkan dan indek pada array pada stack akan dikurangi. Jika data sudah kosong maka akan ditampilkan tulisan data telah kosong, untuk mengetahui data sudah kosong program menanyakan ke fungsi bool is empty. Fungsi print berfungsi untuk mencetak data yang berada pada array stackbaru.data dengan bantuan dari perulangan for. rentang dari perulangan for yang digunakan mulai dari 0 sampai dengan stack baru.top. Fungsi utama Pendeklarasian array kata dengan index 200 yang bertipe character Menampilkan tulisan judul program yang bertulisakan program pembalik kata

Muncul tulisan berupa masukkan kalimat yang ansda inginkan, user menginputkan input data caharacter dan masuk ke array kata. Perulangan for untuk memunculkan array kata Memanggil fungsi print Menampilkan garis

cout<<"Balikan dari kalimat Anda : "; pop(); E. KESIMPULAN

Menampilkan tulisan balikan dari kalimat anda Memanggil fungsi pop()

Satck merupakan struktur data yang penting dalam pemograman, bersifat LIFO (Last IN First Out) kita bisa memanfaatkan fungsi ini untuk digunakan untuk berbagai keperluan, seperti membalik kata, menyimpan array dan mengambilnya satu per satu sesuai dengan keperluan program.

F. RUJUKAN Wikipedia. https://id.wikipedia.org/wiki/Stack_(struktur_data). 2013. Diakses pada 6 Maret 2013. Modul 4 Praktikum Algoritma dan Struktur Data S1 PTI Universitas Negeri Malang. SlideShare.http://s3.amazonaws.com/ppt-download/stack-100419204545-phpapp01.pdf? response-content-disposition=attachment&Signature=ERXlLZGHqvNl2lBY4fnFhVu uy7c%3D&Expires=1362526777&AWSAccessKeyId=AKIAIW74DRRRQSO4NIK A.2013.Diakses pada 6 Maret 2013

Anda mungkin juga menyukai