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
(Tumpukan masih kosong)
Atas atas + 1 Isi[Atas] x Endif 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
(hapus 1 elemen pada tumpukan)
Endif
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
: troubleshooting stack.
Bahasa Pemrogramam
: C++
Compiler
: Code Block
Script program
:
#include
}
#include
else
#include
{
#include
cout<<"data
#define maxstack 5
yang
terambil
"<
using namespace std;
getch(); stackbaru.top--;
struct STACK {//Membuat jenis data a bstrak 'STACK' int top;
} }
float data[5]; }stackbaru;
void print(){//mencetak stack
float dta;
for(int i=0;i<=stackbaru.top;i++) {cout<<" "<
void inisialisasi(){
}
stackbaru.top=-1; }
void clear() {
bool isfull()//menanyakan : penuhkah ? {
stackbaru.top =-1; }
if(stackbaru.top ==maxstack) return true; else return false;
int main(){
}
inisialisasi();
bool isempty(){//menanyakan:kosongkah?
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");
printf("\n 2. push stack"); printf("\n 3. cetak"); printf("\n 4. bersihkan stack");
}
printf("\n 5. exit");
else
cout<<"\n Menu pilihan anda : ";
{
cin>>menu; stackbaru.top++; stackbaru.data[stackbaru.top]=dta;
}
if(menu =='1') {
}
pop(); ulang ='y';
void pop(){//mengambil isi stack
}
if(isempty()==true)
else if(menu =='2')
{
{ cout<<"Data telah kosong!";
if(isfull()==false){
:
cout<<"data
yang
akan
disimpan di stack: "; cin>>dta; push(dta); ulang='y'; }else{ 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
: program pembalik kalimat dengan menggunakan stack
Bahasa Pemrogramam
: C++
Compiler
: Code Block
Script program
:
#include
{
#include
if (stackbaru.top == -1)
#include
return true;
#include
else
#define maxstack 150
return false;
using namespace std;
}
struct STACK //membuat jenis data abstrak stack
void push(char adat) // fungsi untuk proses push
{
{ int top; char
if (isfull() == false) // jika kondisi stack tidak penuh data[maxstack];
//
pendeklarasian
untuk
{
menginputkan suatu kalimat dengan maks 150 };
stackbaru.top++;// user menginputkan data dengan menggunakan variabel adat dimana adat tersebut akan disimpan di stackbaru yang paling atas
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
}
dalam kondisi penuh (menggunakan boolean)
else // jika stack dalam kondisi penuh
{
{ if (stackbaru.top == maxstack-1)
cout << "\nMaaf Stack penuh";
return true; // jika pengkondisian stack dalam keadaan penuh maka benar
} }
else return false;
void pop()
}
//mengambil isi stack
{ while (isempty() == false) // jika kondisi stack tidak
bool isempty()
// fungsi untuk mengetahui apakah stack
dalam kondisi kosong
kosong {
cout<
//
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()
//mencetak stack
{ system ("cls"); cout<<" |Program pembalik kalimat dengan stack |"<
(int
f=1;
f<=stackbaru.top;
f++)
//
diulang
sebanyaknya data yang tersimpan diadat { cout<
void clear() { stackbaru.top = -1; } int main() { char word[150]; //menampung inputan cout<<"| program pembalik kata dengan stack |"<
}
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
: C++
Compiler
: Code Block
Script program
:
#include //header file #include //header file
stack_var[j].nilai=stack_var[j+1].nilai;
#include //header file
stack_var[j+1].nilai=temp;
#include //header file #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
strcpy(stack_var[j+1].nama,temp_c);
int data_sama; //variabel
} }
struct STACK // deklarasi struktur STACK //
}
{
print(); int top;
}
char nama[maxstack]; //variabel nama bertipe data string int nilai; //variabel nilai bertipe data integer
void bubble_sort2(){
};
int temp;
struct STACK stack_var[10];
char temp_c[maxstack]; for(int i=0;i
void print() //mencetak stack
for(int j=0;j
{
if(stack_var[j].nilai<=stack_var[j+1].nilai){ cout<<"\nData :";
temp=stack_var[j].nilai;
cout<<"\n+---------------------------+"; cout<<"\n|
Nama
| Nilai |";
stack_var[j].nilai=stack_var[j+1].nilai;
cout<<"\n+---------------------------+";
stack_var[j+1].nilai=temp;
for (int i=stack_var[0].top; i>=0; i--) {
strcpy(temp_c,stack_var[j].nama); cout<<"\n| "<
"<
|
|"<
strcpy(stack_var[j+1].nama,stack_var[j].nama);
cout<<"+---------------------------+"; }
strcpy(stack_var[j+1].nama,temp_c); }
}
} }}
void bubble_sort(){ int temp;
bool isfull() // fungsi boolean untuk mengecek apakah dalam
char temp_c[maxstack];
kondisi penuh ? //
for(int i=0;i
{
for(int j=0;j
if (stack_var[0].top == maxstack-1) return true;
if(stack_var[j].nilai>=stack_var[j+1].nilai){ temp=stack_var[j].nilai;
else return false; }
bool isempty() // fungsi boolean untuk mengecek apakah dalam kondisi kosong ? //
void pop () { /* mengambil isi stack */
{
if (isempty()==true) { if (stack_var[0].top == -1) return true;
cout<<"Maaf, Stack Masih Kosong...!!\n";
else return false;
} else {
}
cout<<"Data
yang
terambil
:
\nNama
"<
"<
{
cout<<"Telah di ambil...!!\n\n"; if (isfull() == true)
stack_var[0].top--;
{
} cout << "\nMaaf Stack Penuh";
}
} else {
void clear (){ // menghapus isi stack stack_var[0].top++;
stack_var[0].top = -1;
do
cout<<"Data Telah Kosong...!!\n\n";
{
} data_sama=0; cout<<"\nNama\t: ";
void inisialisasi() // karena dalam array di mulai pada indeks ke 0
cin>>stack_var[stack_var[0].top].nama;
{
for (int i=0;i
stack_var[0].top=-1; }
if (stack_var[stack_var[0].top].nama==stack_var[i].nama) // jika ID
int main()
dalam kondisi sama maka menampilkan sebuah statement */
{
{
inisialisasi(); data_sama=1; cout<<"\nNama sudah di gunakan...!!\n\n";
do {
cout<<"Tampilkan Data...?? (y/t)? ";
system("cls");
cin>>tampil;
cout<<"|
MENU STACK
|\n";
if (tampil=='y'||tampil=='Y')
cout<<"----------------------------\n";
{
cout<<"| [1] Masukkan Data
|\n";
cout<<"| [2] Keluarkan Data
|\n";
cout<<"Nama\t: "<
cout<<"| [3] Kosongkan Data
|\n";
cout<<"| [4] Tampilkan Data
|\n";
cout<<"| [5] Urutkan Data cout<<"| [6] Keluar
} while (data_sama==1);
|\n"; |\n";
cout<<"----------------------------\n\n"; cout<<"Pilih : ";cin>>pilih;
} }
cout<<"Nilai\t: ";
switch(pilih)
cin>>stack_var[stack_var[0].top].nilai;
{ case '1': push(); cout<<"\n\nKembali ke Menu Utama (y/t) ?";
: :
cin>>ulang;
default :
break;
cout<<"Maaf, Inputan Anda Salah!!\n\n"; cout<<"Kembali ke Menu Utama (y/t) ?";
case '2':
cin>>ulang;
pop();
break;
cout<<"\n\nKembali ke Menu Utama (y/t) ?";
}
cin>>ulang;
} while (ulang=='Y'||ulang=='y');
break;
}
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
2.
|\n"; cin>>pil; if(pil==1){
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 o
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
o
Field pertama bertipe array untuk menyimpan elemen stack, medan kedua bertipe integer untuk mencatat posisi ujung stack. DAFTAR PUSTAKA
o
Tim Asisten Dosen / Praktikum. 2013. Modul 4 STACK. Malang: Universitas Negeri Malang.