Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Program to perform all types of stack conversions */
- #include<stdio.h>
- #include<conio.h>
- #include<math.h>
- #include<string.h>
- #include <stdlib.h>
- #define MAX 20
- void push( int ,int );
- char pop();
- void in2postfix();
- int priority ( char );
- char stk[20],infix[20],postfix[20];
- int top=-1;
- int main()
- {
- int cont;
- printf("\n Enter the Infix Expression : ");
- scanf("%s",infix);
- in2postfix();
- return 0;
- }
- // method that pushes the elements onto the character stack
- void push(int pos)
- {
- if(top==MAX-1)
- {
- printf("stackfull!!!!");
- }
- else {
- top++;
- stk[top] = infix[pos];
- }
- }
- // method that removes character from stack and returns them
- char pop()
- {
- char ch;
- if(top < 0)
- {
- printf("stackempty!!!!");
- exit(0);
- }
- else
- {
- ch=stk[top];
- stk[top]='\0';
- top--;
- return(ch);
- }
- return 0;
- }
- // method that converts String from infix to postfix
- // all the strings are assumed to be valid expressions
- void in2postfix()
- {
- int i=0,j=0;
- // iterating while end of string is not found
- while(infix[i]!='\0')
- {
- // if an alphabet is found then copy it to the output string
- if(infix[i]>='a' && infix[i]<='z')
- {
- postfix[j]=infix[i];
- j++;
- i++;
- }
- // if an opening bracket is found then put it in stack
- else if(infix[i]=='(' || infix[i]=='{' || infix[i]=='[')
- {
- push(i);
- i++;
- }
- // if an closing bracket is found then
- // keep removing the operators from the stack and add them to postfix string until you find the corresponding opening bracket
- else if(infix[i]==')' || infix[i]=='}' || infix[i]==']')
- {
- if(infix[i]==')')
- {
- while(stk[top]!='(') /*pop till corresponding opening bracket is found*/
- {
- postfix[j]=pop();
- j++;
- }
- pop();
- i++;
- }
- else if(infix[i]==']')
- {
- while(stk[top]!='[') /*pop till corresponding opening bracket is found*/
- {
- postfix[j]=pop();
- j++;
- }
- pop();
- i++;
- }
- else if(infix[i]=='}')
- {
- while(stk[top]!='{') /*pop till corresponding opening bracket is found*/
- {
- postfix[j]=pop();
- j++;
- }
- pop();
- i++;
- }
- }
- // if none of the above cases are satisfied then we surely have an operator
- else
- {
- // if the stack if empty then we simply put the operator in stack
- if(top==-1)
- {
- push(i);
- i++;
- }
- // if the priority of current operator is less than or equal to the stack top then
- // pop the stack top and add it to the postfix string
- else if( priority(infix[i]) <= priority(stk[top]))
- {
- postfix[j]=pop();
- j++;
- // now if you have an operator that has equal priority as of current operator then pop
- while(priority(stk[top]) == priority(infix[i])){
- postfix[j] = pop();
- j++;
- if(top < 0) {
- break;
- }
- }
- push(i);
- i++;
- }
- // if the priority of current operator if high then push it onto the stack
- else if(priority(infix[i]) > priority(stk[top]))
- {
- push(i);
- i++;
- }
- }
- }
- // at the end remove all the operators from the stack
- while(top!=-1)
- {
- postfix[j]=pop();
- j++;
- }
- postfix[j]='\0';
- printf("The converted postfix string is : %s ",postfix);
- }
- // method that returns priority for operators according to their precedence
- int priority ( char alpha )
- {
- if(alpha == '+' || alpha =='-')
- {
- return(1);
- }
- if(alpha == '*' || alpha =='/')
- {
- return(2);
- }
- if(alpha == '$')
- {
- return(3);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment