forked from itsjohnty/Hacktoberfest
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprefixExpressionEvaluation.c
52 lines (47 loc) · 1.15 KB
/
prefixExpressionEvaluation.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 100
typedef struct stack{
char a[MAX_SIZE];
int top;
} stack;
void push(stack *s, int x){
s->top+=1;
s->a[s->top]=x;
}
int pop(stack *s){
s->top-=1;
return s->a[s->top+1];
}
int prefixEval(char exp[MAX_SIZE], stack *s){
for(int i=0; i<strlen(exp); i++){
if(exp[i]>='0' && exp[i]<='9'){
push(s, exp[i]-'0');
}
else{
int p = pop(s);
int q = pop(s);
if(exp[i]=='+') push(s, p+q);
else if(exp[i]=='-') push(s, p-q);
else if(exp[i]=='*') push(s, p*q);
else if(exp[i]=='/') push(s, p/q);
}
}
return s->a[s->top];
}
int main(){
stack *s = malloc(sizeof(stack));
s->top=-1;
char exp[MAX_SIZE];
printf("Enter prefix expression: ");
scanf("%s", exp);
for(int i=0; i<strlen(exp)/2; i++){
char temp = exp[i];
exp[i]=exp[strlen(exp)-i-1];
exp[strlen(exp)-i-1]=temp;
}
printf("Result of the expression: %d", prefixEval(exp, s));
free(s);
return 0;
}