Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- #define MAX 50
- int stack[MAX];
- char post[MAX];
- int top=-1;
- void pushstack(char a);
- void pushstack2(char a);
- void evaluate(char c);
- int main()
- {
- int i,l;
- printf("NOTE: Remember to inlcude SPACE (' ') between each element, but negative must be written normaly.\n");
- printf("Insert a postfix notation :: ");
- gets(post);
- l=strlen(post);
- for(i=0;i<l;i++)
- {
- if(post[i] == ' '){
- continue;
- }
- else if(post[i] == '-' && post[i+1]>='0' && post[i+1]<='9'){
- pushstack2 (post [i+1]);
- i++;
- }
- else if(post[i]>='0' && post[i]<='9')
- {
- pushstack(post[i]);
- }
- else if(post[i]=='+' || post[i]=='-' || post[i]=='*' || post[i]=='/')
- {
- evaluate(post[i]);
- }
- }
- printf("\n\nResult = %d\n",stack[top]);
- return 0;
- }
- void pushstack2(char a)
- {
- top++;
- stack[top]=(int) a - 48;
- stack[top]=-stack[top];
- }
- void pushstack(char a)
- {
- top++;
- stack[top]=(int) a - 48;
- }
- void evaluate(char c)
- {
- int a,b,ans;
- a=stack[top];
- //stack[top]='\0';
- pop();
- // top--;
- b=stack[top];
- //stack[top]='\0';
- //top--;
- pop();
- switch(c)
- {
- case '+':
- ans=b+a;
- break;
- case '-':
- ans=b-a;
- break;
- case '*':
- ans=b*a;
- break;
- case '/':
- ans=b/a;
- break;
- }
- top++;
- stack[top]=ans;
- }
- /*void push (char elem) {
- if (top >= MAX){
- puts("Stack Full!\n");
- }
- else{
- stack [top++] = elem;
- }
- }*/
- int pop(){
- top--;
- if(top < 0){
- printf("Stack empty.");
- return -1;
- }
- else{
- return (stack[top]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement