Infix to Postfix Program in C

Previous
Next
#include<stdio.h>
#include<string.h>

#define LP 10
#define RP 20
#define OPERATOR 30
#define OPERAND 40

#define LPP 0
#define AP 1
#define SP 1
#define MP 2
#define DP 2
#define REMP 2
#define NONE 9

char infix[50], stack[40], postfix[50];
int top;

void InfixToPostfix();
int getType(char);
int getPrecedence(char);
void push(char);
char pop(void);

int main()
{
	char ch;
	do
	{
		top=-1;	
		printf("\nEnter an Infix expression : ");
		gets(infix);
		
		InfixToPostfix();
		
		printf("Posfix expression is : %s \n", postfix);
		printf("Do you want to convert one more(y/n) : ");
		ch = getche();
	}while(ch=='y');
	return 0;	
}

void InfixToPostfix()
{
	int i, p, l, type, prec;
	char next;
	
	i=p=0;
	l=strlen(infix);
	
	while(i<l)
	{
		type = getType(infix[i]);
		switch(type)
		{
			case LP	:	push(infix[i]);
						break;
			
			case RP	:	while((next=pop()) != '(')
						{
							postfix[p] = next;
							++p;
						}
						break;
			
			case OPERAND :	postfix[p] = infix[i];
						++p;
						break;
			
			case OPERATOR :	prec = getPrecedence(infix[i]);
			while((top>-1) && (prec<=getPrecedence(stack[top])))
							{
								postfix[p] = pop();
								++p;
							}
							push(infix[i]);
							break;
		}
		++i;
	}
	while(top > -1)
	{
		postfix[p] = pop();
		++p;
	}
}

int getType(char sym)
{
	switch(sym)
	{
		case '('	:	return LP;
		case ')'	:	return RP;
		case '+'	:
		case '-'	:	
		case '*'	:
		case '/'	:
		case '%'	:	return OPERATOR;
		default	:	return OPERAND;	
	}
}

int getPrecedence(char sym)
{
	switch(sym)
	{
		case '('	:	return LPP;
		case '+'	:	return AP;
		case '-'	:	return SP;
		case '*'	:	return MP;
		case '/'	:	return DP;
		case '%'	:	return REMP;
		default		:	return NONE;
	}
}

void push(char sym)
{
	++top;
	stack[top] = sym;
}

char pop(void)
{
	char sym;
	sym = stack[top];
	--top;
	return sym;
}
Previous
Next

Add Comment

Courses Enquiry Form