Stack (lanj.)
NIM/Nama : 4312011026 / Ikhwan Ash Shafa Arrafi
Setelah mengikuti praktikum ini, mahasiswa diharapkan dapat:
Menggambarkan konsep stack pada memory
Membuat struktur data stack dalam bahasa C
Melakukan operasi pada stack
Mengaplikasikan stack pada program
Salah satu penggunaan stack oleh compiler adalah untuk memeriksa kelengkapan pasangan
kurung buka dan kurung tutup suatu ekspresi aritmetika. Susun program untuk menginput
sebuah ekspresi aritmetika (tidak lebih dari 20 karakter). Kemudian periksa kurung buka dan
kurung tutupnya apakah tepat saling berpasangan. Tampilkan perkataan “BENAR” jika tepat
saling berpasangan, atau tampilkan perkataan “SALAH” bila ada yang tidak tepat saling
berpasangan.
Contoh:
Input Tampilan
A+B* C–D/E BENAR
A + B * (C – D) / E BENAR
(A + B) * (C – D) / E BENAR
(A + B * (C – D) / E) BENAR
(A + B * (C – D) / E SALAH
(A + B) * C – D) / E SALAH
)A + B * (C – D / E SALAH
(A + B ( * (C – D) / E SALAH
(A + B) * )C – D) / E SALAH
Petunjuk:
Telusuri karakter per karakter isi ekspresi aritmetika sampai ditemui karakter NULL (‘\0’).
Jika terbaca karakter kurung buka ‘(‘ maka PUSH kurung buka tersebut ke dalam
stack.
Jika terbaca karakter kurung tutup ‘)’ maka periksa isi stack. Jika stack ada isinya,
maka keluarkan (POP) satu isi stack, yaitu sebuah kurung buka ‘(‘. Tetapi jika isi
stack KOSONG berarti kurung buka dan kurung tutup tidak berpasangan, maka
tampilkan “SALAH” dan proses selesai.
~1~
Setelah semua karakter telah ditelusuri, sampai ditemui karakter NULL, maka periksa
isi stack. Jika isi stack KOSONG, berarti kurung buka dan kurung tutup telah tepat
saling berpasangan, tampilkan “BENAR” dan proses selesai. Jika isi stack masih ada,
berarti kurung buka lebih banyak daripada kurung tutup, tampilkan “SALAH” dan
proses selesai.
Stack S;
int isEmpty(Stack S)
{
return (S.top == -1);
}
int isFull(Stack S)
{
return (S.top == MAX-1);
}
~2~
void pop(Stack *S)
{
if(!isEmpty (*S))
{
(*S).top--;
}
else
{
printf("Urutan Tanda Kurung Tidak Benar, Program
berhenti\n");
exit(0);
}
}
void tampilan()
{
if (S.top == -1){
printf("Urutan Tanda Kurung Benar\n");
}else{
printf("Urutan Tanda Kurung Tidak Benar\n");
}
}
int main()
{
int i;
A:
create(&S);
char x[100];
printf("Inputkan Operasi Aritmatika dengan Tanda Kurung: \n");
scanf("%s", &x);
for (i = 0; x[i] != '\0';i++)
{
if (x[i] == '(')
{
push(&S, x[i]);
}
else if (x[i] == ')')
{
pop(&S);
}
}
tampilan();
getch();
~3~
system("cls");
goto A;
}
Tampilkan hasil running dan penjelasannya di sini.
Program akan meminta inputan berupa char untuk sebuah operasi aritmatika dengan tanda
kurung, setelah input dimasukkan, program akan memeriksa stack apakah urutan tanda
kurung pada operasi aritmatika yang diketikkan telah benar, apabila salah maka program
akan berhenti/Selesai.
~4~
SOAL EKSTRA (Bonus Nilai)
Modifikasi program stack sebelumnya sehingga memiliki kemampuan untuk memeriksa
kelengkapan pasangan kurung buka ‘(‘, ‘[‘, ‘{‘ dan kurung tutup ‘)’, ‘]’, ‘}’.
Contoh:
Input Tampilan
A + [ B * (C – D) – E] / F BENAR
[A + B * (C – D)]– E / F BENAR
[A + B * (C – D)} – E / F SALAH
{ A + B * (C – D)] – E / F SALAH
Kesimpulan
Setelah mengikuti praktikum ini, apa saja yang telah Anda pelajari?
~5~