Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string>
- //#include "StackLinkListHeader.cpp"
- using namespace std;
- class StackList{
- private :
- struct Node{
- char value;
- struct Node *next;
- } ;
- struct Node *Head;
- public :
- StackList()
- {
- Head=NULL;
- }
- ~StackList()
- {
- Node *tempNode;
- while(Head!=NULL)
- {
- tempNode=Head;
- Head=Head->next;
- delete tempNode;
- }
- }
- bool IsEmpty()
- {
- return Head==NULL;
- }
- char Pop ()
- {
- if(IsEmpty())
- {
- cout << "Error: the Stack is Empty"<<endl;
- return -1;
- }
- else
- {
- char val=Head->value;
- Node *tmpNode;
- tmpNode=Head;
- Head=Head->next;
- delete tmpNode;
- return val;
- }
- }
- char Top()
- {
- if(IsEmpty())
- {
- cout<<"Error:The Stack is empty."<<endl;
- }
- else
- {
- return Head->value;
- }
- }
- void Push(const char x)
- {
- Node *newNode;
- newNode=new Node;
- newNode->value= x;
- newNode->next=Head;
- Head=newNode; ;
- }
- };
- int Priority(char ele)
- {
- int pri;
- char a,b,c;
- if(ele=='^')
- {
- pri=3;
- }
- else if(ele=='*' || ele=='/' || ele=='%')
- {
- pri=2;
- }
- else
- {
- if(ele=='+' || ele=='-')
- {
- pri=1;
- }
- else
- pri=0;
- }
- return pri;
- }
- int main ()
- {
- string s;
- cout<<"Please enter an expression: "<<endl;
- getline(cin,s);
- StackList operat;
- StackList append;
- int i;
- int pi;
- int chi;
- char c;
- char k;
- char l;
- char a[10000];
- int m;
- for( i = 0 ; i < s.size() ; i++)
- {
- if(s[i]>='A' && s[i]<='Z' || s[i]>='a' && s[i]<='z' || s[i]>='0' && s[i]<='9')
- {
- append.Push(s[i]);
- }
- else
- {
- if(operat.IsEmpty())
- {
- operat.Push(s[i]);
- }
- else if(!operat.IsEmpty())
- {
- pi=Priority(s[i]);
- c=operat.Top();
- chi=Priority(c);
- if(chi<pi)
- {
- operat.Push(s[i]);
- }
- if(chi==pi)
- {
- k=operat.Pop();
- operat.Push(s[i]);
- append.Push(k);
- }
- if(chi>pi)
- {
- while(!operat.IsEmpty() && chi>pi)
- {
- k=operat.Pop();
- append.Push(k);
- }
- if(operat.IsEmpty())
- {
- operat.Push(s[i]);
- }
- }
- }
- }
- }
- while(!operat.IsEmpty())
- {
- l=operat.Pop();
- append.Push(l);
- }
- while(!append.IsEmpty())
- {
- a[m]=append.Pop();
- m++;
- }
- cout<<"Converted postfix expression: "<<endl;
- for(int p=m-1 ; p>=-2; p--)
- {
- cout<<a[p]<<" ";
- }
- cout<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement