Example 1: infix to postfix program in c++
/*https://github.com/Sudhanshu1304/Stack-Application*/
#include <iostream>
#include<string>
using namespace std;
class Stack{
private:
char A[5];
int Size;
public:
int top;
Stack(){
top=-1;
Size=sizeof(A)/sizeof(char);
}
bool IsFull(){
if(top==Size-1){
return true;
}
else{
return false;
}
}
bool IsEmpty(){
if(top==-1){
return true;
}
else{
return false;
}
}
char peek(){
return A[top];
}
void Push(char val){
if (IsFull()==false){
top++;
A[top]=val;
}
else{
cout<<"\nThe Stack is Full"<<endl;
}
}
char Pop(){
if(IsEmpty()==false){
char temp=A[top];
A[top]='0';
top--;
return temp;
}
else{
return '-1';
}
}
void Show_Stack(){
for(int i=0;i<top+1;i++){
cout<<A[i];
}
}
};
int Search(char A){
string CHAR[]={"([","{)","]}","+-","*/","^$"};
int Size=(sizeof(CHAR)/sizeof(string));
for(int i=0;i<Size;i++){
if(A==CHAR[i][0]){
if(i+i>=6){
return i+i;
}
else{
return i+i+0;
}
}
else if(CHAR[i][1]==A){
if(i+i>=6){
return i+i;
}
else{
return i+i+1;
}
}
}
return -1;
}
void Display(char ch,string vari, Stack &s){
int Size=s.top+1;
cout<<"\n "<<ch<<" ";
s.Show_Stack();
for(int i=0;i<10-Size;i++){
cout<<" ";
}
cout<<vari<<endl;
}
int main(){
Stack STACK;
char temp;
string exp;//"A+B*C";
cout<<"Enter Your Expression :";
cin>>exp;
string out="";
cout<<"\n\nExpression Stack Postfix\n"<<endl;
for(int i=0;i<exp.size();i++){
temp=exp[i];
int ab=Search(temp);
if (ab!=-1){
/* If We ENCOUNTER CLOSING BRACKETS*/
if(ab<=5 && ab>=3){
while(Search(STACK.peek())>2){
char val=STACK.Pop();
out=out+val;
Display(temp,out,STACK);
}
STACK.Pop();
Display(temp,out,STACK);
}
/* Search Precedence*/
else{
if (Search(temp)>=0 && Search(temp)<=2){
STACK.Push(temp);
Display(temp,out,STACK);
}
/* If TOP < Temp */
else if(Search(STACK.peek())<ab){
STACK.Push(temp);
Display(temp,out,STACK);
}
else{
/* if STACK= +,* and temp= + then we have to remove two times */
while(Search(STACK.peek())>=ab){
char val=STACK.Pop();
out=out+val;
Display(temp,out,STACK);
}
STACK.Push(temp);
Display(temp,out,STACK);
}
}
}
/* If an Alphabet */
else{
out=out+temp;
Display(temp,out,STACK);
}
}
while(STACK.IsEmpty()==false){
char val=STACK.Pop();
out=out+val;
Display(temp,out,STACK);
}
cout<<"\n\nFINAL STRING : "<<out<<endl;
}
Example 2: infix to postfix conversion
Begin
initially push some special character say # into the stack
for each character ch from infix expression, do
if ch is alphanumeric character, then
add ch to postfix expression
else if ch = opening parenthesis (, then
push ( into stack
else if ch = ^, then //exponential operator of higher precedence
push ^ into the stack
else if ch = closing parenthesis ), then
while stack is not empty and stack top ≠ (,
do pop and add item from stack to postfix expression
done
pop ( also from the stack
else
while stack is not empty AND precedence of ch <= precedence of stack top element, do
pop and add into postfix expression
done
push the newly coming character.
done
while the stack contains some remaining characters, do
pop and add to the postfix expression
done
return postfix
End
Comments
Post a Comment