LAPORAN PRAKTIKUM
ALGORITMA STRUKTUR DATA II
STACK
Disusun oleh :
Syukur Jaya Mendrofa 201501072
PROGRAM STUDI SISTEM INFORMASI
SEKOLAH TINGGI ILMU KOMPUTER YOS SUDARSO
PURWOKERTO
LISTING PROGRAM PRAKTIKUM DAN OUTPUT
Listing program :
#include<iostream> #include<stack> #include<string>
using namespace std;
string InfixToPostfix(string expression);
int HasHigherPrecedence(char operator1, char operator2); bool IsOperator(char C);
bool IsOperand(char C);
int main() {
string expression;
cout<<"Masukkan Infix Expression \n"; getline(cin,expression);
string postfix = InfixToPostfix(expression); cout<<"Output = "<<postfix<<"\n";
}
string InfixToPostfix(string expression) {
stack<char> S; string postfix = "";
for(int i = 0;i<expression.length();i++) {
if(expression[i] == ' ' || expression[i] == ',') continue; else if(IsOperator(expression[i]))
{
while(!S.empty() && S.top() != '(' && HasHigherPrecedence(S.top(), expression[i])) { postfix+= S.top(); S.pop(); } S.push(expression[i]); } else if(IsOperand(expression[i])) {
postfix += expression[i]; }
else if(expression[i] == '(') {
S.push(expression[i]); }
else if(expression[i] == ')') {
while(!S.empty() && S.top() != '('){ postfix += S.top();
S.pop(); } S.pop(); } } while(!S.empty()) {
S.pop(); }
return postfix; }
bool IsOperand(char C) {
if(C >= '0' && C<= '9') return true; if(C >= 'a' && C<= 'z') return true; if(C >= 'A' && C<= 'Z') return true; return false;
}
bool IsOperator(char C) {
if(C == '+' || C == '-' || C == '*' || C == '/' || C == '$') return true;
return false; }
int IsRightAssociative(char op) {
if(op == '$') return true; return false;
}
int GetOperatorWeight(char op) {
int weight = -1; switch(op) {
case '+': case '-': weight =1; case '*': case '/': weight = 2; case '$': weight = 3; }
return weight; }
int HasHigherPrecedence(char op1, char op2) {
int op1Weight = GetOperatorWeight(op1); int op2Weight = GetOperatorWeight(op2);
if(op1Weight == op2Weight) {
if(IsRightAssociative(op1)) return false; else return true;
}
Output
Tugas Praktikum
1. Buat Program Konversi Postfix ke Infix
2. Buat Program Konversi Postfix ke Prefix
Listing Program :
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> # define MAX 20
char str[MAX],stack[MAX]; int top=-1;
void push(char c) {
stack[++top]=c; }
char pop() {
return stack[top--]; }
void postfix_infix() {
int u,n; char b,op;
printf("\n########### POSTFIX ke INFIX ###############\n\n"); printf("Postfix Ekspresi \n");
gets(str); gets(str); n=strlen(str); for(u=0;u<MAX;u++) stack[u]=NULL;
printf("Infix Ekspresi :\t\n"); printf("%c",str[0]);
for(u=1;u<n;u++) {
if(str[u]=='+'||str[u]=='-'||str[u]=='*'||str[u]=='/') {
b=pop(); op=str[u];
printf("%c%c",op,b); }
else {
push(str[u]); }
}
void postfix_prefix() {
int n,m;
printf("\n########### POSTFIX ke PREFIX ###############\n\n"); printf("Postfix Ekspresi\n");
gets(str); gets(str); m=strlen(str);
printf("Prefix Ekspresi :\n"); for(n=m-1;n>=0;n--)
printf("%c",str[n]); }
int main() {
int pil; while(1) {
printf("\n******************** STACK **************************\n"); printf("\n\n Pilihan Konversi : \n");
printf("1.Postfix ke Infix\n2.Postfix ke Prefix\n3.Keluar\n\n"); scanf("%d",&pil);
switch(pil) {
case 1:postfix_infix();break; case 2:postfix_prefix();break; case 3:exit(0);
default:printf("Pilihan Anda tidak tersedia");break; }
}
}
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
# define MAX 20
char str[MAX], stack[MAX];
int top = -1;
void push(char c)
{
stack[++top] = c;
}
char pop()
{
return stack[top--];
}
void postfix_infix()
{
int u, n;
char b, op;
printf("\n########### POSTFIX ke INFIX ###############\n\n");
printf("Postfix Ekspresi \n");
gets(str);
gets(str);
n = strlen(str);
for (u = 0; u<MAX; u++)
stack[u] = NULL;
for (u = 1; u<n; u++)
{
if (str[u] == '+' || str[u] == '-' || str[u] == '*' || str[u] ==
'/')
{
b = pop();
op = str[u];
printf("%c%c", op, b);
}
else
{
push(str[u]);
}
}
printf("%c", str[top--]);
}
void postfix_prefix()
{
int n,m;
printf("\n########### POSTFIX ke PREFIX ###############\n\n");
printf("Postfix Ekspresi\n");
gets(str);
gets(str);
m=strlen(str);
printf("Prefix Ekspresi :\n");
for(n=m-1;n>=0;n--)
printf("%c",str[n]);
}
{
int pil;
while(1)
{
printf("\n******************** STACK **************************\n");
printf("\n\n Pilihan Konversi : \n");
printf("1.Postfix ke Infix\n2.Postfix ke Prefix\n3.Keluar\n\n");
scanf("%d",&pil);
switch(pil)
{
case 1:postfix_infix();break;
case 2:postfix_prefix();break;
case 3:exit(0);
default:printf("Pilihan Anda tidak tersedia");break;
}
}