Stack - Index of

advertisement
Struktur Data - Stack
Sapta Candra Miarsa,S.T.,M.T.
Aneka Struktur Data
Struktur Data
Kelebihan
Kekurangan
Array
Penambahan data dibelakang
lebih mudah dilakukan
Ukuran tetap, penghapusan
lambat, pencarian lama
Array terurut
Pencarian jauh lebih cepat
dibanding array yang tidak
terurut
Ukuran tetap, penghapusan
lambat, penyisipan lama
Tumpukan (Stack)
Penambahan dilaksanakan
dengan cepat, akses terhadap
data yang terakhir kali
dimasukan bisa dilakukan
dengan cepat
Pencarian dan penghapusan
lambat
Antrian (Queue)
Data yang pertama kali
masuk mudah diakses
Akses terhadap data lain
lambat
Senarai berantai
Penyisipan dan penghapusan
data mudah
Pencarian lama
Pohon biner (Binary tree)
Pencarian dan penyisipan
mudah
Penghapusan kompleks
Tabel hash
Akses cepat bila kunci
diketahui. Penyisipan cepat
Akses pelan jika kunci tidak
diketahui
• Stack (tumpukan) adalah struktur data yang
memungkinkan penyisipan dan pengambilan
data dari satu ujung yang disebut puncak.
C
B
A
elemen
20
10
2
13
77
24
32
55
1
2
3
4
5
6
7
8
Index array (A)
Stack (tumpukan)
kosong
C
B
A
berisi 3
C
B
A
diambil 1 dari puncak
Stack memiliki sifat last in first out (LIFO), artinya data yang
terakhir kali masuk adalah Menjadi data yang pertama kali keluar.
Operasi Stack
• Operasi dasar pada tumpukan berupa push dan pop.
• Push adalah operasi untuk memasukkan data kedalam
tumpukan.
Push (T,d)  T: menyatakan tumpukan,
d: item data yang disisipkan ke dalam T
• Pop adalah operasi untuk mengambil data dari
tumpukan.
Pop (T)
Operasi yang dapat dilakukan stack
•
•
•
•
•
•
Menambah (push)
Mengambil (pop)
megecek apakah stack penuh (isFull)
mengecek apakah stack kosong (isEmpty)
membersihkan stack (clear).
Mencetak isi stack (print)
Ilustrasi Push dan Pop
Operasi
Penjelasan
Push( T, ‘Bantul’)
Push( T, ‘Sleman’)
Bantul dimasukkan
terlebih dahulu baru
Sleman
Pop(T)
Push( T, ‘Kulon Progo’)
Sleman dikeluarkan,
Kulon Progo
dimasukkan
Push(T, ‘Wonosari’)
Push(T, ‘Sleman’)
Wonosari dimasukkan,
diikuti Sleman
Hasil tumpukan
Sleman
Bantul
Kulon Progo
Bantul
Sleman
Wonosari
Kulon Progo
Bantul
Pop(T)
Pop(T)
Pop(T)
?
?
Operasi-operasi stack
• Mendefinisikan Max untuk maksimum isi stack
# define Max 50
# defive true 1
# define false 0
• Mendefinisikan stack
Char stack [Max];
Init top;
• Fungsi init : untuk inisialisasi atau membuat
stack baru yang masih kosong.
Void init (void)
{
top=-1;
}
• Fungsi Full : digunakan untuk mengecek apakah
stack penuh.
int full (void)
{
if (top==MAX-1) return (true);
else return (false);
}
• Fungsi Empty : digunakan untuk mengecek
apakah stack kosong.
int empty (void)
{
if (top==-1) return (true);
else return (false);
}
• Fungsi Clear : digunakan untuk mengosongkan
stack. Stack dianggap kosong jika ujung atas
stack pada posisi -1.
Void clear (void)
{
top=-1;
printf (“Stack telah dikosongkan\n”);
}
• Fungsi Push : digunakan untuk menambah data
kedalam stack. Penambahan data tidak dapat
dilakukan jika stack penuh.
- Tambahkan nilai top.
- Masukkan data pada posisi top.
Void push (char info);
{
if (full ()!= true)
{
top++;
stack[top]=info;
}
else printf (“Stack sudah penuh.. \n”);
}
• Fungsi pop : digunakan untuk mengeluarkan
data teratas dari stack dengan syarat
sebelumnya stack tidak boleh kosong.
- Ambil data dari posisi top
- Turunkan nilai top
char pop (void);
{
char info;
if (empty()!= true)
{
info=stack[top];
top--;
return(info);
}
else printf (“Stack sudah kosong.. \n”);
}
Program konversi aritmatik mengubah
bentuk INFIX ke PREFIX
• Misalkan operasi: A + B - C
• Operasi tersebut disebut dengan notasi
infix, dan notasi infiks tersebut harus
diubah terlebih dahulu menjadi notasi
prefix
• A + B - C notasi prefixnya : - + A B C
A+B-C
A+B-C
Stack
Stack
Prefix
+
A
A+B-C
Prefix
+
AB
A+B-C
Stack
Prefix
+
ABC
Prefix
-+A BC
•
•
•
•
•
•
A+B-C
Scan A
Scan +
Scan B
Scan Scan C
: stack (kosong) prefix (kosong )
: stack (kosong) prefix ( A
)
: stack ( +
) prefix ( A
)
: stack ( +
) prefix ( A B
)
: stack ( + ) prefix ( A B
)
: stack ( + ) prefix ( A B C )
• Karena sudah habis, push ToS stack ke Prefix
• Prefix ( -+ABC )
Program konversi aritmatik mengubah
bentuk INFIX ke POSTFIX
• Misalkan operasi: 7 + 1* 8
• Operasi tersebut disebut dengan notasi
infix, dan notasi infiks tersebut harus
diubah terlebih dahulu menjadi notasi
postfix
• 7 + 1* 8 notasi postfiksnya : 718*+
Infix to Postfix
7+8*1
Stack
Posftix
• Lihat soal dari depan ke belakang
• Jika operand, maka masukkan ke postfix
• Jika operator, maka:
▫ Jika stack masih kosong, push ke stack
• Jika semua soal sudah dibaca, maka pop semua isi stack dan push
ke postfix dan sesuaikan dengan urutannya
7+8*1
7+8*1
Stack
Stack
Postfix
+
7
Postfix
*
+
7+8*1
7+8*1
Stack
Stack
*
+
78
Postfix
Postfix
781
781*+
•
•
•
•
•
•
7+8*1
Scan 7
Scan +
Scan 8
Scan *
Scan 1
: stack (kosong) postfix (kosong)
: stack (kosong) postfix ( 7
)
: stack ( +
) postfix ( 7
)
: stack ( +
) postfix ( 7 8
)
: stack ( + *
) postfix ( 7 8
)
: stack ( + *
) postfix ( 7 8 1 )
• Karena sudah habis, push ToS stack ke Posfix
• Postfix ( 7 8 1 * + )
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!
Postfix
7 8 1*+
Stack
*
1
8
7
*
1
8
7
+
8
7
15
+
Y
X
8+7=15
Y
X
1*8=8
8
7
15
Download