Infix to Postfix
Program
#include<iostream>
#include<conio.h>
#include<stdio.h>
using namespace std;
#define MAX 100
class stack{
int top;
char infix[MAX],postfix[MAX],s[MAX];
public:
stack()
{
top=-1;
}
void read();
char Push(char);
char Pop();
int conversion();
char Prioity(char);
void display();
};
char stack::Push(char a){
if(top>MAX)
cout<"STACK is over flow";
else{
top++;
s[top]=a;
}
}
char stack::Pop(){
char item;
if(top==-1)
{
cout<<"\n Stack is under flow"<<endl;
}
else
{ item=s[top];
top--;
return item;
}
}
char stack::Prioity(char x){
switch(x){
case'(':
return 0;
case'+':
return 1;
case'-':
return 1;
case'*':
return 2;
case'/':
return 2;
}
}
int stack::conversion(){
int k=0,i;char sp;
for(i=0;infix[i]!='\0';i++&&k++)
{
if(infix[i]>='0'&&infix[i]<='9')
postfix[k]=infix[i];
else if(infix[i]>='A'&&infix[i]<='Z')
postfix[k]=infix[i];
else if(infix[i]>='a'&&infix[i]<='z')
postfix[k]=infix[i];
else if(infix[i]=='(')
Push(infix[i]);
else if(infix[i]==')'){
while(sp=Pop()!='('){
infix[i]=sp;}}
else{
while(top!=-1)
{
while(Prioity(infix[i])<=Prioity(sp=Pop())){
postfix[k]=sp;
}
}
//if(Prioity(infix[i])>Prioity(sp)){
Push(sp);
Push(infix[i]);
//}
}
}
while(top!=-1){
sp=Pop();
postfix[k]=sp;
k++;}
postfix[k-1]='\0';
//for(i=0;postfix[i]='\0';i++)
cout<<"Expression in Postfix :"<<postfix;
}
/*void stack::display(){
for(int i=1;postfix[i]='\0';i++)
cout<<"Expression in Postfix :"<<postfix[i];
}*/
void stack::read(){
cout<<"Enter expression in postfix:";
cin>>infix;
//cout<<"Expression in Postfix :"<<infix;
}
int main(){
stack s;
s.read();
s.conversion();
// s.display();
}
#include<conio.h>
#include<stdio.h>
using namespace std;
#define MAX 100
class stack{
int top;
char infix[MAX],postfix[MAX],s[MAX];
public:
stack()
{
top=-1;
}
void read();
char Push(char);
char Pop();
int conversion();
char Prioity(char);
void display();
};
char stack::Push(char a){
if(top>MAX)
cout<"STACK is over flow";
else{
top++;
s[top]=a;
}
}
char stack::Pop(){
char item;
if(top==-1)
{
cout<<"\n Stack is under flow"<<endl;
}
else
{ item=s[top];
top--;
return item;
}
}
char stack::Prioity(char x){
switch(x){
case'(':
return 0;
case'+':
return 1;
case'-':
return 1;
case'*':
return 2;
case'/':
return 2;
}
}
int stack::conversion(){
int k=0,i;char sp;
for(i=0;infix[i]!='\0';i++&&k++)
{
if(infix[i]>='0'&&infix[i]<='9')
postfix[k]=infix[i];
else if(infix[i]>='A'&&infix[i]<='Z')
postfix[k]=infix[i];
else if(infix[i]>='a'&&infix[i]<='z')
postfix[k]=infix[i];
else if(infix[i]=='(')
Push(infix[i]);
else if(infix[i]==')'){
while(sp=Pop()!='('){
infix[i]=sp;}}
else{
while(top!=-1)
{
while(Prioity(infix[i])<=Prioity(sp=Pop())){
postfix[k]=sp;
}
}
//if(Prioity(infix[i])>Prioity(sp)){
Push(sp);
Push(infix[i]);
//}
}
}
while(top!=-1){
sp=Pop();
postfix[k]=sp;
k++;}
postfix[k-1]='\0';
//for(i=0;postfix[i]='\0';i++)
cout<<"Expression in Postfix :"<<postfix;
}
/*void stack::display(){
for(int i=1;postfix[i]='\0';i++)
cout<<"Expression in Postfix :"<<postfix[i];
}*/
void stack::read(){
cout<<"Enter expression in postfix:";
cin>>infix;
//cout<<"Expression in Postfix :"<<infix;
}
int main(){
stack s;
s.read();
s.conversion();
// s.display();
}
Comments
Post a Comment