1.
Program Stack Konversi Infix ke Postfix
Listing Program
#include <stdio.h>
#include <string.h>
#define MAXSTACK 100
typedef char ItemType;
typedef struct{
char item[MAXSTACK];
int count;
}Stack;
Stack tumpukan;
void InitializeStack(Stack *);
int Empty(Stack *);
int Full(Stack *);
void Push(ItemType, Stack *);
ItemType Pop(Stack *);
int drjt(char);
void konversi_cetak(char []);
int main()
{
char tampung[MAXSTACK], jawab;
puts("PROGRAM STACK MENGUBAH NOTASI INFIX MENJADI
POSTFIX");
do{
InitializeStack(&tumpukan);
fflush(stdin);
puts("");
printf("Masukkan ekspresi dalam notasi infix : ");
fgets(tampung, sizeof(tampung), stdin);
printf("Ungkapan postfixnya = ");
konversi_cetak(tampung);
puts("");
fflush(stdin);
printf("\nMau mencoba lagi (y/t) ? ");
scanf("%c", &jawab);
}while((jawab == 'y') || (jawab == 'Y'));
return(0);
}
void InitializeStack(Stack *S)
{
S->count = 0;
}
int Empty(Stack *S)
{
return (S->count == 0);
}
int Full(Stack *S)
{
return (S->count == MAXSTACK);
}
void Push(ItemType x, Stack *S)
{
if(Full(S))
printf("Stack penuh! Data tidak dapat masuk!");
else{
++(S->count);
S->item[S->count]=x;
}
}
ItemType Pop(Stack *S)
{
ItemType x;
if (Empty(S)){
printf ("STACK KOSONG!");
return 0;
}
else{
x = (S->item[S->count]);
--(S->count);
return x;
}
}
int drjt(char x)
{
if(x == '(')
return 0;
else if((x == '+') || (x == '-'))
return 1;
else if((x == '*') || (x == '/'))
return 2;
else if(x == '^')
return 3;
else
return -1;
}
void konversi_cetak(char temp[])
{
int i, pjg, valid = 1;
char kar, smtr;
pjg = strlen(temp)-1;
for (i=0;i<pjg;i++){
kar = temp[i];
switch(kar){
case '(' :
Push(kar, &tumpukan);
break;
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case
'8': case '9':
printf("%c", kar);
break;
case '+': case '-': case'*': case '/': case '^':
if((Empty(&tumpukan)) || ((drjt(kar) >
drjt([Link][[Link]]))))
Push(kar, &tumpukan);
else{
do{
smtr = Pop(&tumpukan);
printf("%c", smtr);
}while (drjt(kar) < drjt([Link][[Link]]));
Push(kar, &tumpukan);
}
break;
case ')':
while([Link][[Link]] != '('){
smtr = Pop(&tumpukan);
printf("%c", smtr);
}
Pop(&tumpukan);
break;
default :
valid = 0;
puts("INVALID STATEMENT");
break;
}
}
if((valid != 0) && (!Empty(&tumpukan))){
smtr = Pop(&tumpukan);
printf("%c", smtr);
}
}
Output
Kesimpulan
o Program stack konversi notasi infix ke postfix dalam bahasa C
menggunakan struktur data stack untuk mengubah notasi infix menjadi
postfix.
o Notasi infix diterima sebagai string dan kemudian diproses karakter per
karakter.
o Setiap karakter di dalam notasi infix diperiksa untuk menentukan
apakah itu operator atau operand.
o Operan ditambahkan ke ekspresi postfix tanpa perubahan, sedangkan
operator dimasukkan ke stack.
o Operator dalam stack diurutkan berdasarkan tingkat prioritas operator,
dan operator dengan prioritas lebih tinggi diproses terlebih dahulu.
o Ketika operator dengan prioritas lebih rendah ditemukan, operator
dengan prioritas lebih tinggi dikeluarkan dari stack dan ditambahkan ke
ekspresi postfix.
o Setelah selesai memproses semua karakter dalam notasi infix, operator
yang tersisa di dalam stack akan dikeluarkan dan ditambahkan ke
ekspresi postfix.