Anda di halaman 1dari 15

LAPORAN PRAKTIKUM STACK MODUL 4

Disusun untuk Memenuhi Mata Kuliah Praktikum Algoritma dan Struktur Data dibimbing oleh Bapak Aji Prasetya Wibawa.

Oleh: Muhamad Ainurrahman 130533608096

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)

penuh false Atas atas + 1 Isi[Atas] x Endif

(Tumpukan masih kosong)

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

b. Fungsi yang melakukan pengecekan apakah stack dalam kondisi kosong

c. Fungsi yang melakukan pengecekan apakah stack dalam kondisi penuh

d. Fungsi untuk menghapus seluruh stack

e. Fungsi untuk mencetak isi stack

Latihan Algoritma dan Struktur Data

Nama Program Bahasa Pemrogramam Compiler Script program


#include <iostream> #include <stdio.h> #include <conio.h> #include <stdlib.h> #define maxstack 5 using namespace std;

: troubleshooting stack. : C++ : Code Block :


} else { cout<<"data yang terambil :

"<<stackbaru.data[stackbaru.top]<<endl; getch(); stackbaru.top--;

struct STACK {//Membuat jenis data abstrak 'STACK' int top; float data[5]; }stackbaru; float dta; }

void print(){//mencetak stack for(int i=0;i<=stackbaru.top;i++) {cout<<" "<<stackbaru.data[i]<<" ";}

void inisialisasi(){ stackbaru.top=-1; }

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;

if(menu =='1') { pop(); ulang ='y';

void pop(){//mengambil isi stack if(isempty()==true) { cout<<"Data telah kosong!";

} else if(menu =='2') { if(isfull()==false){

cout<<"data disimpan di stack: "; cin>>dta; push(dta); ulang='y'; }else{

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); }

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

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

g. Tampilkan data stack

Tugas Praktikum Algoritma dan Struktur Data

Nama Program Bahasa Pemrogramam Compiler Script program


#include <iostream> #include <stdio.h> #include <conio.h> #include <windows.h> #define maxstack 150 using namespace std;

: program pembalik kalimat dengan menggunakan stack : C++ : Code Block :


{ if (stackbaru.top == -1) return true; else return false; } void push(char adat) // fungsi untuk proses push {

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

menginputkan suatu kalimat dengan maks 150 };

char adat[maxstack]; struct STACK stackbaru;

stackbaru.data[stackbaru.top]=adat; // increment, yang bermksud jika penginputan adat lagi maka akan tersimpan diatas adat sebelumnnya

bool isfull()

// fungsi untuk mengetahui apakah stack

} else // jika stack dalam kondisi penuh {

dalam kondisi penuh (menggunakan boolean) { if (stackbaru.top == maxstack-1) return true; // jika pengkondisian stack dalam keadaan penuh maka benar else return false; } }

cout << "\nMaaf Stack penuh"; }

void pop() {

//mengambil isi stack

while (isempty() == false) // jika kondisi stack tidak bool isempty() // fungsi untuk mengetahui apakah stack kosong {

dalam kondisi 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

} }

void print() { system ("cls");

//mencetak stack

cout<<" |Program pembalik kalimat dengan stack |"<<endl; cout<<" ======================================"<<e ndl; cout<<"\nInput Kalimat : "; for (int f=1; f<=stackbaru.top; f++) // diulang

sebanyaknya data yang tersimpan diadat { cout<<stackbaru.data[f]; } }

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

Bahasa Pemrogramam Compiler Script program


#include <iostream> //header file #include <stdio.h> //header file #include <string.h> //header file #include <stdlib.h> //header file

: C++ : Code Block :

stack_var[j].nilai=stack_var[j+1].nilai; stack_var[j+1].nilai=temp;

#define maxstack 10 //batas maksimum data stack

strcpy(temp_c,stack_var[j].nama);

using namespace std;

strcpy(stack_var[j+1].nama,stack_var[j].nama);

char pilih,tampil,ulang,pil; //variabel int data_sama; //variabel

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 bubble_sort2(){ int temp; char temp_c[maxstack]; for(int i=0;i<stack_var[0].top;i++){

void print() //mencetak stack { cout<<"\nData :"; cout<<"\n+---------------------------+"; cout<<"\n| Nama | Nilai |";

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;

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";

cout<<"----------------------------\n\n"; cout<<"Pilih : ";cin>>pilih;

cout<<"Nilai\t: "; cin>>stack_var[stack_var[0].top].nilai; } }

switch(pilih) { case '1': push(); cout<<"\n\nKembali ke Menu Utama (y/t) ?";

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.

bubble_sort(); } else if (pil==2){ bubble_sort2(); }

cout<<"\n\nKembali ke Menu Utama (y/t) ?"; cin>>ulang; break;

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.

Anda mungkin juga menyukai