Advertisement
AnAriyan

CSC203_Assign04_1522435_Section01

Aug 8th, 2016
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.32 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. //#include "StackLinkListHeader.cpp"
  4.  
  5. using namespace std;
  6.  
  7. class StackList{
  8. private :
  9.    struct Node{
  10.    char value;
  11.    struct Node *next;
  12.  
  13.    } ;
  14.    struct Node *Head;
  15.  
  16.  
  17. public :
  18. StackList()
  19. {
  20.     Head=NULL;
  21. }
  22. ~StackList()
  23. {
  24.     Node *tempNode;
  25.  
  26.     while(Head!=NULL)
  27.     {
  28.         tempNode=Head;
  29.         Head=Head->next;
  30.         delete tempNode;
  31.     }
  32. }
  33.  
  34. bool IsEmpty()
  35. {
  36.     return Head==NULL;
  37. }
  38. char Pop ()
  39. {
  40.     if(IsEmpty())
  41.     {
  42.         cout << "Error: the Stack is Empty"<<endl;
  43.         return -1;
  44.     }
  45.     else
  46.     {
  47.         char val=Head->value;
  48.          Node *tmpNode;
  49.          tmpNode=Head;
  50.          Head=Head->next;
  51.          delete tmpNode;
  52.          return val;
  53.     }
  54.  
  55. }
  56.  
  57.  
  58. char Top()
  59. {
  60.  
  61.   if(IsEmpty())
  62.   {
  63.       cout<<"Error:The Stack is empty."<<endl;
  64.   }
  65.   else
  66.   {
  67.       return Head->value;
  68.   }
  69. }
  70.  
  71. void Push(const char x)
  72. {
  73.    Node *newNode;
  74.    newNode=new Node;
  75.    newNode->value= x;
  76.    newNode->next=Head;
  77.     Head=newNode;                ;
  78.  
  79. }
  80.  
  81. };
  82. int Priority(char ele)
  83.     {
  84.         int pri;
  85.         char a,b,c;
  86.  
  87.         if(ele=='^')
  88.         {
  89.             pri=3;
  90.         }
  91.  
  92.        else if(ele=='*' || ele=='/' || ele=='%')
  93.         {
  94.             pri=2;
  95.         }
  96.         else
  97.         {
  98.             if(ele=='+' || ele=='-')
  99.             {
  100.                 pri=1;
  101.             }
  102.             else
  103.                 pri=0;
  104.         }
  105.         return pri;
  106.     }
  107.  
  108. int main ()
  109. {
  110.     string s;
  111.     cout<<"Please enter an expression: "<<endl;
  112.     getline(cin,s);
  113.     StackList operat;
  114.     StackList append;
  115.     int i;
  116.     int pi;
  117.     int chi;
  118.     char c;
  119.     char k;
  120.     char l;
  121.     char a[10000];
  122.     int m;
  123.  
  124.     for( i = 0 ; i < s.size() ; i++)
  125.     {
  126.           if(s[i]>='A' && s[i]<='Z' || s[i]>='a' && s[i]<='z' || s[i]>='0' && s[i]<='9')
  127.           {
  128.               append.Push(s[i]);
  129.           }
  130.           else
  131.           {
  132.               if(operat.IsEmpty())
  133.               {
  134.                   operat.Push(s[i]);
  135.  
  136.               }
  137.  
  138.               else if(!operat.IsEmpty())
  139.               {
  140.                  pi=Priority(s[i]);
  141.  
  142.                  c=operat.Top();
  143.  
  144.                  chi=Priority(c);
  145.  
  146.  
  147.                   if(chi<pi)
  148.                   {
  149.                     operat.Push(s[i]);
  150.  
  151.                   }
  152.                   if(chi==pi)
  153.                   {
  154.  
  155.                        k=operat.Pop();
  156.                        operat.Push(s[i]);
  157.                        append.Push(k);
  158.  
  159.                   }
  160.  
  161.                   if(chi>pi)
  162.                   {
  163.                      while(!operat.IsEmpty() && chi>pi)
  164.                      {
  165.                           k=operat.Pop();
  166.                           append.Push(k);
  167.                      }
  168.  
  169.                      if(operat.IsEmpty())
  170.                      {
  171.                          operat.Push(s[i]);
  172.                      }
  173.  
  174.                   }
  175.  
  176.               }
  177.           }
  178.     }
  179.  
  180.     while(!operat.IsEmpty())
  181.     {
  182.         l=operat.Pop();
  183.         append.Push(l);
  184.  
  185.     }
  186.  
  187.  
  188.     while(!append.IsEmpty())
  189.     {
  190.       a[m]=append.Pop();
  191.  
  192.           m++;
  193.     }
  194.     cout<<"Converted postfix expression: "<<endl;
  195.     for(int p=m-1 ; p>=-2; p--)
  196.     {
  197.         cout<<a[p]<<" ";
  198.     }
  199.     cout<<endl;
  200.  
  201.  
  202.         return 0;
  203.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement