02 Stack PDF
02 Stack PDF
Stack (Tumpukan)
A. TUJUAN PEMBELAJARAN
Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:
1. Memahami terminologi yang terkait dengan struktur data stack.
2. Memahami operasi-operasi yang ada dalam stack.
3. Mengidentifikasi permasalahan-permasalahan pemrograman yang harus
diselesaikan dengan menggunakan stack, sekaligus menyelesaikannya
B. DASAR TEORI
Salah satu konsep yang efektif untuk menyimpan dan mengambil data adalah
"terakhir masuk sebagai yang pertama keluar" (Last In First Out / LIFO). Dengan
konsep ini, pengambilan data akan berkebalikan urutannya dengan penyimpanan data.
Stack adalah sebuah kumpulan data dimana data yang diletakkan di atas data
yang lain. Dengan demikian 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.
Untuk menjelaskan pengertian diatas kita mengambil contoh sebagai berikut.
Misalnya kita mempunyai dua buah kotak yang kita tumpuk, sehingga kotak kita
letakkan di atas kotak yang lain. Jika kemudian stack dua buah kotak tersebut kita
tambah dengan kotak ketiga dan seterusnya, maka akan kita peroleh sebuah stack
kotak, yang terdiri dari N kotak.
Secara sederhana, sebuah stack bisa kita ilustrasikan seperti pada gambar 4.1
di bawah ini. Dari gambar di bawah ini, kita bisa mengatakan bahwa kotak B ada di
atas kotak A dan ada di bawah kotak C. Dari gambar tersebut kita dapat melihat
bahwa kita hanya bisa menambah atau mengambil sebuah kotak lewat satu ujung,
yaitu ujung bagian atas. Nampak pula bahwa stack merupakan kumpulan data yang
sifatnya dinamis, artinya kita bisa menambah atau mengambil data darinya.
To
Dari ilustrasi di atas, bisa kita lihat bahwa notasi postfix dari ungkapan:
( A + B ) / (( C D ) * E ^ F)
adalah
A B + C D E F ^ */
C. TUGAS PENDAHULUAN
Jawablah pertanyaan-pertanyaan di bawah ini :
1. Buatlah flowchart untuk masing-masing operasi stack seperti yang sudah
dijelaskan di dasar teori
D. PERCOBAAN
1. Buatlah workspace untuk praktikum Struktur Data dengan menggunakan Visual
C++.
2. Buatlah project untuk praktikum KEEMPAT.
3. Cobalah untuk masing-masing percobaan di bawah ini.
4. Selesaikan soal-soal yang ada dengan mengimplementasikan flowchart yang anda
buat pada Tugas Pendahuluan.
S->Item[S->Count]=x;
++(S->Count);
}
}
void main()
{
int i,input;
Stack tumpukan;
InitializeStack(&tumpukan);
for (i=0;i<MAXSTACK;i++)
{
printf ("Masukkan isi stack ke- %d : ",i+1);
scanf(&input);
Push(input,&tumpukan);
}
for (i=MAXSTACK;i>0;i--)
{
printf("Isi stack ke- %d : ",I) ;
printf("%d \n",Pop(&tumpukan));
}
}
#include <stdio.h>
#include <string.h>
Stack tumpukan;
main()
{
char tampung[MAXSTACK], jawab;
x = (S->item[S->count]);
--(S->count);
return x;
}
}
pjg = strlen(temp)-1;
for (i=0;i<pjg;i++)
{
kar = temp[i]; //membaca input per karakter
switch(kar){
//if kar = '(' -> push ke dalam tumpukan
case '(' :
Push(kar, &tumpukan);
break;
/* if kar = ')' -> pop dan tulis semua isi tumpukan sampai
ujung tumpukan = '('.
Pop juga tanda '(' ini, tetapi tidak usah ditulis
*/
case ')' :
while(tumpukan.item[tumpukan.count] != '(') {
smtr = Pop(&tumpukan);
printf("%c", smtr);
}
Pop(&tumpukan);
break;
/*
Jika statemen valid, akhir notasi infix telah tercapai,
sedangkan tumpukan masih belum kosong, pop semua isi tumpukan
dan tulis hasilnya
*/
E. LATIHAN
1. Lakukan operasi berikut :
Jika karakter maka push ke stack
Jika asterisk (*) maka pop dan cetak hasilnya.
Bagaimana output program dengan input seperti di bawah ini ?
EAS*Y*QUE***ST***IO*N***
2. Buatlah sebuah program yang melakukan konversi dari bilangan desimal ke
bilangan biner, octal, heksa dengan menggunakan stack
3. Buatlah sebuah program yang melakukan pembalikan terhadap kalimat dengan
menggunakan stack
Contoh:
Kalimat : Struktur Data
Hasil setelah dibalik : ataD rutkurtS
4. Tentukan apakah sebuah kalimat yang diinputkan dalam program (dengan
menggunakan stack) adalah sebuah palindrom atau bukan. Palindrom adalah
kalimat yang jika dibaca dari depan dan dari belakang, maka bunyinya sama.
Contoh:
Kalimat : sugus
Kalimat tersebut adalah palindrom
5. Tambahkan implementasi Percobaan2 untuk mengecek apakah notasi infix yang
diinputkan benar atau tidak.
Contoh :
Infix : 5 * ( 4 2
Output : Notasi infix salah, kurung tidak lengkap
Infix : 5 * ( 4 )
Output : Notasi infix salah, operand tidak lengkap
Infix : 5 ( 4 2 )
Output : Notasi infix salah, operator tidak lengkap
6. Tambahkan implementasi Percobaan2 hingga mendapatkan hasil
penghitungannya.
Contoh:
infix : 5*(42)
postfix : 542-*
hasil : 10
F. LAPORAN RESMI
1. Untuk setiap listing program dari percobaan-percobaan di atas, ambil capture
outputnya.
2. Tuliskan kesimpulan dari percobaan yang telah anda lakukan.