Anda di halaman 1dari 13

LAPORAN

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

Imanda Meyfi Perdani 140533600939

S1 PTI’14 OFF A

UNIVERSITAS NEGERI MALANG


FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
MARET 2015
STACK

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

Function void pop()


if (isempty() == true)
write (Data telah kosong)
else
write(stackbaru.data[stackbaru.top])
write(stackbaru.top--)
end if
end function pop

Function void print()


for i0 to stackbaru.top step 1
write(stackbaru.data[i])
end for
end function void print

Function void clear()


stackbaru.top = -1;
end function void clear

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;

struct STACK { //Membuat jenis data abstrak 'STACK'


int top;
float data[4];
};

float dta;
struct STACK stackbaru;

void inisialisasi()
{
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(float dta) { //Mengisi stack (menyimpan data distack)


if (isfull()==true) {
puts ("Maaf, stack penuh");
} else {
stackbaru.top++;
stackbaru.data[stackbaru.top]=dta; //
}
}

void pop () { //Mengambil isi stack


if (isempty()==true) { //ganti false-->true
cout<<"Data telah kosong!\n";
} 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;
cout<<"Data stack Sudah Kosong\n\n";
}

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

cout<<"Menu Pilihan Anda: ";


cin>>menu;
if (menu=='1') {
pop();
cout<<"Ulangi (y/t)? ";cin>>uulang;

} 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:

1. Program digunakan untuk mengisi, mengurangi, dan membersihkan stack


2. Jika user memilih menu 1,maka program akan memanggil fungsi pop. Fungsi
pop tersebut akan melakukan pengecekan apakah data pada stack kosong.
Apabila stack tersebut kosong maka program akan menampilkan keterangan
bahwa stack kosong. Namun, jika stacknya tidak kosong maka program akan
mengambil data terakhir yang diinputkan oleh user pada stack. Hal ini seperti
pada syntax
if (isempty()==true) {
cout<<"Data telah kosong!\n";
} else {
cout<<"data yang terambil :
"<<stackbaru.data[stackbaru.top]<<endl;
stackbaru.top--;
3. Jika user memilih menu 2,maka program akan memanggil fungsi push. Fungsi
push tersebut akan melakukan pengecekan apakah data pada stack penuh.
Apabila stack tersebut penuh maka program akan menampilkan keterangan
bahwa stack penuh. Namun, jika stacknya kosong maka program akan
menambahkan angka yang diinputkan user pada stack. Hal ini seperti pada
syntax
if (isfull()==true) {
puts ("Maaf, stack penuh");
} else {
stackbaru.top++;
stackbaru.data[stackbaru.top]=dta;
}
4. Jika user memilih menu 3 maka program akan menampilkan data yang
diinputkan user lewat fungsi print
5. Jika user memilih menu 4 maka program akan menghapus semua data yang
ada pada stack lewat fungsi clear. (sebenarnya data tidak hilang, hanya saja
posisi stack digeser ke elemen -1) seperti gambar berikut
stackbaru.top = -1;
cout<<"Data stack Sudah Kosong\n\n";
Output:
4. TUGAS PRAKTIKUM
1. Program Membalik kata dengan stack

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 i0 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

using namespace std;

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:

1. Program digunakan untuk membalik kata dengan stack


2. Ketika user menginputkan data (kalimat), maka program akan menyimpan
karakter tersebut pada elemen array dan memasukannya pada stack. Hal
tersebut terlihat lewat syntax
cout<< "Masukkan kalimat : "; gets(kata);cout << endl;
for(int i=0; kata[i]; i++)
{
push(kata[i]);
}
3. Kemudian program akan menampilkan inputan user tadi lewat fungsi print
4. Kemudian program akan melakukan pembalikan kata lewat fungsi pop.
Dimana kata yang ada pada stack dicek (jika kondisinya salah/stack terisi maka
program akan melakukan perulangan sebanyak huruf yang iinputkan pada
program), hal tersebut terlihat dari syntax
while (isempty() == false)
{
cout<<stackbaru.data[stackbaru.top];stackbaru.top--;

}
Output:

Gambar setelah melakukan pembalikan data

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

1. Modul Praktikum 2010 Algoritma dan struktur Data “Stack”


2. http://mahfuzm.blogspot.com/2011/04/program-stack-c.html, diakses tanggal 16
Maret 2015 pukul 22:54 WIB
3. http://social.msdn.microsoft.com/Forums/en-US/246b695e-3d8e-4f44-9c81-
70d5a25c2f8f/finding-duplicate-entries-in-array, diakses tanggal 16 Maret 2015 pukul
22:59 WIB
4. http://dewa18.wordpress.com/2009/10/28/struktur-data-pengertian-stack/ , diakses
tanggal 16 Maret 2015 pukul 23:59 WIB

Anda mungkin juga menyukai

  • Orto 3 Kamis RB
    Orto 3 Kamis RB
    Dokumen1 halaman
    Orto 3 Kamis RB
    ArinaRosyida
    Belum ada peringkat
  • Orto 3 Kamis Ra.
    Orto 3 Kamis Ra.
    Dokumen1 halaman
    Orto 3 Kamis Ra.
    ArinaRosyida
    Belum ada peringkat
  • Analisis Kasus Orto3
    Analisis Kasus Orto3
    Dokumen9 halaman
    Analisis Kasus Orto3
    ArinaRosyida
    Belum ada peringkat
  • Bismillah
    Bismillah
    Dokumen1 halaman
    Bismillah
    ArinaRosyida
    Belum ada peringkat
  • Orto 3 Kamis Ra
    Orto 3 Kamis Ra
    Dokumen1 halaman
    Orto 3 Kamis Ra
    ArinaRosyida
    Belum ada peringkat
  • Orto 3 Kamis Rb.
    Orto 3 Kamis Rb.
    Dokumen1 halaman
    Orto 3 Kamis Rb.
    ArinaRosyida
    Belum ada peringkat
  • Raziqa 19-21, Arina 19-47
    Raziqa 19-21, Arina 19-47
    Dokumen4 halaman
    Raziqa 19-21, Arina 19-47
    ArinaRosyida
    Belum ada peringkat
  • Arinar Bismillah
    Arinar Bismillah
    Dokumen1 halaman
    Arinar Bismillah
    ArinaRosyida
    Belum ada peringkat
  • BELAJAR HURUF
    BELAJAR HURUF
    Dokumen10 halaman
    BELAJAR HURUF
    ArinaRosyida
    Belum ada peringkat
  • Fraktur Mandibula
    Fraktur Mandibula
    Dokumen6 halaman
    Fraktur Mandibula
    ArinaRosyida
    Belum ada peringkat
  • Baca Dulu
    Baca Dulu
    Dokumen1 halaman
    Baca Dulu
    ArinaRosyida
    Belum ada peringkat
  • DMF 5
    DMF 5
    Dokumen35 halaman
    DMF 5
    ArinaRosyida
    Belum ada peringkat
  • Laporan Stack
    Laporan Stack
    Dokumen13 halaman
    Laporan Stack
    ArinaRosyida
    Belum ada peringkat
  • Biodok
    Biodok
    Dokumen2 halaman
    Biodok
    ArinaRosyida
    Belum ada peringkat
  • Laporan Praktikum Vii (Garap)
    Laporan Praktikum Vii (Garap)
    Dokumen19 halaman
    Laporan Praktikum Vii (Garap)
    ArinaRosyida
    Belum ada peringkat
  • VIEW MODULE
    VIEW MODULE
    Dokumen16 halaman
    VIEW MODULE
    ArinaRosyida
    0% (3)
  • Pendhlntut 2
    Pendhlntut 2
    Dokumen3 halaman
    Pendhlntut 2
    ArinaRosyida
    Belum ada peringkat
  • LP Fis TMJ
    LP Fis TMJ
    Dokumen9 halaman
    LP Fis TMJ
    ArinaRosyida
    Belum ada peringkat
  • Lo Kompail
    Lo Kompail
    Dokumen17 halaman
    Lo Kompail
    ArinaRosyida
    Belum ada peringkat
  • Lo
    Lo
    Dokumen2 halaman
    Lo
    ArinaRosyida
    Belum ada peringkat
  • Tutorial Tugas
    Tutorial Tugas
    Dokumen4 halaman
    Tutorial Tugas
    ArinaRosyida
    Belum ada peringkat
  • Lo
    Lo
    Dokumen2 halaman
    Lo
    ArinaRosyida
    Belum ada peringkat
  • Tutfix
    Tutfix
    Dokumen7 halaman
    Tutfix
    ArinaRosyida
    Belum ada peringkat
  • Fraktur Mandibula
    Fraktur Mandibula
    Dokumen6 halaman
    Fraktur Mandibula
    ArinaRosyida
    Belum ada peringkat
  • Oropharingeal Candidiasis (OPC) Dan Kolonisasi Yeast
    Oropharingeal Candidiasis (OPC) Dan Kolonisasi Yeast
    Dokumen13 halaman
    Oropharingeal Candidiasis (OPC) Dan Kolonisasi Yeast
    ArinaRosyida
    Belum ada peringkat