PRAKTIKUM V 2010
STACK
Disusun untuk Memenuhi Matakuliah Praktikum Algoritma dan Struktur Data
Dibimbing oleh Bapak Aji P. Wibawa PhD
Oleh:
Andika Ruly Mantovani 140533602043
S1 PTI’14 OFF A
1. TUJUAN
Mahasiswa mampu memahami terminology yang terkait dengan struktur data stack
Mahasiswa mampu memahami operasi – operasi yang ada dalam stack
Mahasiswa dapat mengidentifikasi permasalahan – permasalahan pemrograman yang
harus diseleseikan dengan menggunakan stack sekaligus menyeleseikannya.
2. DASAR TEORI
Pengertian Stack pada Struktur Data adalah sebagai tumpukan dari benda,
sekumpulan data yang seolah-olah diletakkan di atas data yang lain, koleksi dari objek-
objek homogen, atau Suatu urutan elemen yang elemennya dapat diambil dan ditambah
hanya pada posisi akhir (top) saja. Stack pada Struktur Data dapat diilustrasikan dengan
dua buah kotak yang ditumpuk, kotak yang satu akan ditumpuk diatas kotak yang lainnya.
Jika kemudian stack 2 kotak tadi, ditambah kotak ketiga, keempat, kelima, dan seterusnya,
maka akan diperoleh sebuah stack kotak yang terdiri dari N kotak.
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.
Di dalam pengembangannya, stack dapat dikelompokkan menjadi dua bagian. Dua bagian
tersebut yaitu Single Stack dan Double Stack.
Single Stack
Single Stack atau Stack Tunggal adalah stack yang hanya terdiri dari satu koleksi. Bila
stack ini direpresentasikan dengan array, maka pengisian dan penghapusan harus
dilakukan bertahap dari indeks TOP-nya.
Di dalam proses single stack terdapat tiga macam proses utama, yaitu :
- Inisialisasi
- PUSH (Insert, Masuk, Simpan, Tulis)
- POP (Delete, Keluar, Ambil, Baca, Hapus)
INISIALISASI
Proses inisialisasi merupakan proses awal yang dilakukan untuk menyimpan indeks
penunjuk stack. Roses ini dilakukan dengan intruksi :
top = -1;
PUSH
Proses push adalah proses memasukkan data baru ke stack indeks selanjutnya. Algoritma
dasar proses PUSH adalah :
top = top + 1;array[top] = variable_tampung;
POP
Proses pop adalah proses mengeluarkan / mengambil data dari stack dengan indeks yang
disimpan pada variable top. Algoritma dasar proses POP adalah :
variable_tampung = array[top];top = top – 1;
Double Stack
Double Stack atau Stack Ganda adalah stack yang hanya terdiri dari dua single stack. Bila
stack ini direpresentasikan dengan array, maka pengisian dan penghapusan harus melalui
salah satu arah.
Di dalam proses double stack terdapat lima macam proses utama, yaitu :
- Inisialisasi
- PUSH1 (Proses Push untuk Single Stack pertama)
- POP1 (Proses Pop untuk Single Stack pertama)
- PUSH2 (Proses Push untuk Single Stack kedua)
- POP2 (Proses Pop untuk Single Stack kedua)
Algoritma dasar masing – masing proses adalah sebagai berikut :
INISIALISASI top1 = -1;top2 = MAX_ARRAY;
PUSH1 top1 = top1 + 1;array[top1] = variable_tampung;
POP1 variable_tampung = array[top1];top1 = top1 – 1;
PUSH2 top2 = top2 – 1;array[top2] = variable_tampung;
POP2 variable_tampung = array[top2];top2 = top2 + 1;
3. LATIHAN PRAKTIKUM
1. Program Stack
Algoritma:
Algorithm ProStack
Deklarasi :
maxstack 5
struct STACK
top int
data[4] float
end struct STACK
data float
struct STACK stackbaru
Deskripsi :
Function void inisialisasi()
stackbaru.top=-1;
end function inisialisasi
//fungsi isfull
Function bool isfull()
if (stackbaru.top == maxstack-1)
return true;
end if
End function isfull
//fungsi isempty
Function bool isempty ()
if (stackbaru.top == -1)
return true;
end if
End function isempty
//fungsi push
Function void push(dta float)
if (isfull() == true)
write( "\nMaaf Stack penuh")
else
stackbaru.top++;
stackbaru.data[stackbaru.top]=dta;
end if
end function void push
call inisialisasi()
menu char
uulang char
do
read(menu)
if (menu=='1')
call pop();
Write(“Ulangi (y/t)? ")
read(uulang)
else if (menu=='2')
write(data yang akan disimpan di stack: “)
read(dta)
call push(dta);
Write(“Ulangi (y/t)? ")
read(uulang)
else if (menu=='3')
write(Data yang ada pada stack\n")
call print();
Write(“Ulangi (y/t)? ")
read(uulang)
else if (menu=='4')
call clear();
Write(“Ulangi (y/t)? ")
read(uulang)
else if (menu=='5')
exit(0);
end if
while (uulang=='Y'||uulang=='y')
End do-while
End ProStack
Syntax:
#include <iostream>
#include <stdio.h> /*tambah header stdio*/
#include <stdlib.h> /*tambah header stdlib*/
#define maxstack 5
using namespace std;
float dta;
struct STACK stackbaru;
void inisialisasi()
{
stackbaru.top=-1;
}
void print() {
for (int i=0;i<=stackbaru.top;i++) {
cout<<stackbaru.data[i]<<" ";
}
}
int main()
{
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");
} else if (menu=='2'){
cout<<"data yang akan disimpan di stack: ";cin>>dta;
push(dta);
cout<<"Ulangi (y/t)? ";cin>>uulang;
} else if (menu=='3'){
cout<<"Data yang ada pada stack\n";
print();
cout<<"\n\nUlang (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');
}
Deskripsi Program:
Algoritma:
Algorithm BalikKat (kata)
Pre : kata terurut
Post : kata terbalik
Deklarasi :
maxstack 200
struct STACK
top int
data[maxstack] 200
end struct STACK
data char
struct STACK stackbaru
Deskripsi :
//fungsi isfull
Function bool isfull()
if (stackbaru.top == maxstack-1)
return true;
end if
End function isfull
//fungsi isempty
Function bool isempty ()
if (stackbaru.top == -1)
return true;
end if
End function isempty
//fungsi push
Function void push(dta char)
if (isfull() == true)
write( "\nMaaf Stack penuh")
end if
end function void push
Function void pop()
while (isempty() == false)
write(stackbaru.data[stackbaru.top];stackbaru.top--;
end while
end function pop
Function void print()
for i0 to stackbaru.top step 1
write(stackbaru.data[i])
end for
end function void print
kata[200] char
write("\nJika dibalik Dibalik jadi : ")
call pop()
End BalikKat
Syntax:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#define maxstack 200
struct STACK
{
int top;
char data[maxstack];
};
char dta[maxstack];
struct STACK stackbaru;
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() == true)
{
cout << "\nMaaf Stack penuh";
}
else
{
stackbaru.top++;stackbaru.data[stackbaru.top]=dta;
}
}
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];
cout<<"====================================\n";
cout<<" PROGRAM MEMBALIK KATA DENGAN STACK \n";
cout<<"====================================\n";
cout<< "Masukkan kalimat : "; gets(kata);cout << endl;
for(int i=0; kata[i]; i++)
{
push(kata[i]);
}
cout<<"====================================\n";
print();
cout<<"\nJika dibalik Dibalik jadi : ";
pop();
cout<<"\n";
}
Deskripsi Program:
}
Output:
5. KESIMPULAN
1. Stack adalah kumpulan atau tumpukan data yang bersifat homogen dimana data
dapat dipindahkan satu per satu.
2. Pada saat ukuran stack, kalau kita teruskan menambah data lagi, akan terjadi
overflow(kelebihan muatan).
3. Di dalam pengembangannya, stack dapat dikelompokkan menjadi dua bagian. Dua
bagian tersebut yaitu Single Stack dan Double Stack. Single Stack atau Stack
Tunggal adalah stack yang hanya terdiri dari satu koleksi. Double Stack atau Stack
Ganda adalah stack yang hanya terdiri dari dua single stack.
4. Ada beberapa fungsi dasar stack ,yaitu inisialisasi,push dan pop.
DAFTAR RUJUKAN