Anda di halaman 1dari 31

STRUKTUR DATA

Stack

Stack
Stack atau tumpukan adalah kumpulan elemen
yang hanya dapat ditambah dan atau dihapus
dari satu ujung (gerbang) yang sama
Dalam arti bahwa seolah-olah ada satu elemen
yang diletakkan diatas elemen yang lain
Stack mempunyai sifat LIFO (Last In First Out)
dimana elemen yang terakhir masuk akan
pertama kali keluar
Representasi stack dapat dilakukan dengan
menggunakan Array atau Linked List

Stack
Suatu susunan koleksi data dimana data dapat
ditambahkan dan dihapus selalu dilakukan pada
bagian akhir data, yang disebut dengan top of
stack
Stack bersifat LIFO (Last In First Out)
Data yang terakhir masuk ke dalam stack akan
menjadi yang pertama keluar dari stack
Compo

Compo
Compo

VCD

TV

TV

VCD

VCD

TV

TV

Operasi Stack
PUSH
I
N

Push

POP
O
U
T

: digunakan untuk menambah item pada stack pada


tumpukan paling atas
Pop
:digunakan untuk mengambil item pada stack pada
tumpukan
paling atas
Clear : digunakan untuk mengosongkan stack
IsEmpty : fungsi yang digunakan untuk mengecek apakah
stack sudah
kosong
IsFull : fungsi yang digunakan untuk mengecek apakah
stack sudah
penuh

stack
Stack dapat dibuat dengan menggunakan array
atau linked list
Representasi stack dengan menggunakan array
dapat dilakukan dengan asumsi bahwa elemen
maksimal suatu stack tidak boleh melebihi
maksimum banyak elemen atau ukuran array
Untuk itu, maka diperlukan adanya suatu
penunjuk atau suatu nama yang mencatat posisi
puncak elemen stack tersebut

Deklarasi stack
Bentuk deklarasi dari Stack ada 2 (dua) yaitu
Deklarasi ke- I :
#define MaxS n
TypeData Isi[MaxS];
TypeData Top;
Deklarasi II ke- 2 :
#define MaxS n
Struct Stack
{
TypeData Isi[MaxS];
TypeData Top;
};

Operasi Pada stack


Ada dua operasi dasar yang dapat dilakukan
terhadap sebuah stack, yaitu
Operasi Insert atau penyisipan elemen (Push)
Operasi Delete atau penghapusan elemen
(Pop)

Inisialisasi Pada stack


Sebelum stack dapat dioperasikan, maka terlebih
dahulu diinisialisasikan dengan memberi harga
S.Top = 0
Bentuk inisialisasi :
Void Inits (Stack &S)
{
S.Top = 0;
}

Program Stack
Inisialisasi Stack
Pada mulanya isi top dengan -1, karena
array dalam bahasa C dimulai dari 0,
yang berarti bahwa data stack adalah
KOSONG!
Top adalah suatu variabel penanda
dalam Stack yang menunjukkan elemen
teratas data Stack sekarang. Top Of
Stack akan selalu bergerak hingga
mencapai MAX of STACK yang
menyebabkan stack PENUH!

Operasi push
Operasi Push adalah operasi memasukkan elemen
kedalam stack
Jika
stack
direpresentasikan
dengan
menggunakan array, maka elemen array yang
dimasukkan tidak boleh melebihi ukuran stack
Maka dengan demikian harus ada nama sebagai
penunjuk ke posisi elemen Puncak (Top) dari stack
dan penunjuk isi maksimum dari stack (Max)
Operasi Push dapat dilakukan jika stack belum
mencapai Max

Fungsi push
Fungsi Push untuk memasukkan elemen kedalam
Stack yaitu
Void Push (Stack &S, char Data)
{
if (S.Top < MaxS)
{
S.Top++;
S.Isi[S.Top] = Data;
}
else
cout<<Stack Penuh;
}

Operasi Push

Program Stack
Fungsi IsFull
Adalah operasi yang akan digunakan untuk mengecek
apakah stack penih atau tidak
Dengan cara memeriksa top of stack, jika sudah
sama dengan MAX_STACK-1 maka full, jika belum
(masih lebih kecil dari MAX_STACK-1) maka belum full
Suatu Stack dikatakan penuh, jika S.Top bernilai
MaxS[S.Top=MaxS).
Jika S.Top = MaxS, maka fungsi akan mengembalikan
nilai True, jika tidak maka fungsi akan mengembalikan
nilai False

Program Stack
Ilustrasi Stack pada kondisi Full

Program Stack
Fungsi IsEmpty

Untuk memeriksa apakah data Stack masih


kosong?
Dengan cara memeriksa top of stack, jika
masih -1 maka berarti data Stack masih
kosong!

Program Stack
Fungsi Pop
Operasi Pop adalah operasi yang dilakukan
terhadap Stack dengan menghapus elemen
yang berada paling puncak dari Stack
Setiap kali operasi Pop dilakukan, maka
petunjuk Top akan berkurang satu
Tampilkan terlebih dahulu nilai elemen
teratas stack dengan mengakses indeksnya
sesuai dengan top of stacknya, baru dilakukan
decrement dari nilai top of stacknya sehingga
jumlah elemen stack berkurang.
Operasi Pop dapat dilakukan jika Stack tidak
kosong

Program Stack

Fungsi pop
Fungsi Pop untuk menghapus elemen dari Stack
adalah sebagai berikut :
Void Pop (Stack &S, Char &Hsl)
{
if (S.Top ! = 0)
{
Hsl = S.Isi[S.Top];
S.Top--;
}
else
cout<<Stack kosong;
}

Program Stack
Fungsi Print
Untuk menampilkan semua
elemen-elemen data Stack
Dengan cara me-loop semua
nilai array secara terbalik,
karena kita harus mengakses
dari indeks array tertinggi
terlebih dahulu baru ke indeks
yang lebih kecil!

Program Stack

Mencetak Stack
Isi suatu stack dapat dicetak dengan menggunakan
fungsi berikut :
Void Cetak (Stack S)
{
int I;
cout<<end<<Isi Stack : ;
if (S.Top! = 0)
{
for (i=1; i<=S.Top; i++)
cout<<S.Isi[i];
}
else
cout<<Stack Kosong;
}

Fungsi Peek
Digunakan untuk melihat top of stack

Karakteristik stack
Karakteristik dari suatu Stack adalah :
Elemen Stack yaitu item-item data yang terdapat
dalam stack
Top menunjukkan posisi puncak pada stack
Max menunjukkan banyaknya maksimum item
data dari stack
Stack kosong tidak mungkin dilakukan Pop, karena
akan menyebabkan underflow
Stack Penuh tidak mungkin dilakukan Push,
karena akan menyebabkan Overflow

Studi Kasus Stack


Pembuatan Kalkulator
SCIENTIFIC
Misalkan operasi: 3 + 2 * 5
Operasi di atas disebut notasi
infiks, notasi infiks tersebut
harus diubah lebih dahulu
menjadi notasi postfix
3 + 2 * 5 notasi postfiksnya
adalah 3 2 5 * +

Studi Kasus Stack Infix to Postfix


3+2*5
stack

posftix

Baca soal dari depan ke belakang


Jika berupa operand, maka masukkan ke posftix
Jika berupa operator, maka:
Jika stack masih kosong, push ke stack
Jika derajat operator soal > derajat operator top of stack
Push operator soal ke stack

Selama derajat operator soal <= derajat operator top of stack


Pop top of stack dan masukkan ke dalam posfix
Setelah semua dilakukan, push operator soal ke stack

Jika sudah semua soal dibaca, pop semua isi stack dan push ke
postfix sesuai dengan urutannya

Studi Kasus Stack

Contoh lain
a+b*c-d
Stack (kosong) dan Postfik (kosong)

Scan a
Postfik: a

Scan +
Stack: +

Scan b
Postfik: ab

Scan *, karena ToS (+) < *, maka add


ke Stack
Stack: +*

Contoh
Scan c
Postfik: abc

Scan , karena * > -, maka pop Stack, dan add ke


Postfik
Stack: +
Postfik: abc*
Karena + >= -, maka pop Stack, dan add ke Postfik,
karena Stack kosong, maka push ke stack
Stack: Postfik: abc*+

Scan d
Postfik: abc*+d

Karena sudah habis, push ToS stack ke Posfix


Postfix: abc*+d-

Postfix Evaluator

Scan Postfix string dari kiri kekanan.


Siapkan sebuah stack kosong.
Jika soal adalah operand, tambahkan ke
stack. Jika operator, maka pasti akan ada
minimal 2 operand pada stack

Pop dua kali stack, pop pertama disimpan dalam


y, dan pop kedua ke dalam x. Lalu evaluasi x
<operator> y. Simpan hasilnya dan push ke
dalam stack lagi.

Ulangi hingga seluruh soal discan.


Jika sudah semua, elemen terakhir pada
stack adalah hasilnya.
Jika lebih dari satu elemen, berarti error!

Contoh 325*+ (3+2*5)

Terima Kasih

Anda mungkin juga menyukai