Guest User

Untitled

a guest
Oct 22nd, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.94 KB | None | 0 0
  1. #include <iostream>
  2. #include<vector>
  3. #include<string>
  4. using namespace std;
  5.  
  6. struct node{
  7. char val;
  8. node* next;
  9. };
  10.  
  11. class Stack{
  12. node* head;
  13. public:
  14. Stack();
  15. void push(char chr);
  16. char pop();
  17. bool isempty();
  18. char top();
  19. };
  20.  
  21. Stack::Stack(){
  22. head=NULL;
  23. }
  24.  
  25. void Stack::push(char chr){
  26. node* temp = new node;
  27. temp->val = chr;
  28. if(head==NULL){
  29. temp->next=NULL;
  30. } else {
  31. temp->next=head;
  32. }
  33. head = temp;
  34. }
  35.  
  36. char Stack::pop(){
  37. if(head==NULL){
  38. cout<<"Empty Stack"<<endl;
  39. return NULL;
  40. } else {
  41. int temp = head->val;
  42. head = head->next;
  43. return temp;
  44. }
  45. }
  46.  
  47. bool Stack::isempty(){
  48. if(head==NULL){
  49. return true;
  50. }
  51. return false;
  52. }
  53.  
  54. char Stack::top(){
  55. return head->val;
  56. }
  57.  
  58. bool isoperand(char var){
  59. if(var=='/' || var=='^' || var=='*' || var=='+' || var=='-'){
  60. return true;
  61. }
  62. return false;
  63. }
  64.  
  65. int priority(char var){
  66. if(var=='^'){
  67. return 5;
  68. } else if(var=='/'){
  69. return 4;
  70. } else if(var=='*'){
  71. return 3;
  72. } else if(var=='+'){
  73. return 2;
  74. } else if(var=='-'){
  75. return 1;
  76. } else {
  77. return 0;
  78. }
  79. }
  80.  
  81. vector<char> infix_to_postfix(vector<char> expr){
  82. vector<char> answer;
  83. Stack operand;
  84. operand.push('#');
  85. int i=0;
  86. while(i<expr.size()){
  87. if((expr[i] >= 'a' && expr[i] <= 'z')||(expr[i] >= 'A' && expr[i] <= 'Z')){
  88. answer.push_back(expr[i]);
  89. } else if(expr[i] == '('){
  90. operand.push('(');
  91. } else if(expr[i] == ')'){
  92. while(operand.top() != '(' && operand.top() != '#'){
  93. char temp = operand.pop();
  94. answer.push_back(temp);
  95. }
  96. if(operand.top()=='('){
  97. operand.pop();
  98. }
  99. } else if(isoperand(expr[i])){
  100. int random = priority(expr[i]);
  101. int random1 = priority(operand.top());
  102. if(random > random1){
  103. operand.push(expr[i]);
  104. } else {
  105. while(random < random1 && operand.top() != '#'){
  106. char temp2 = operand.pop();
  107. answer.push_back(temp2);
  108. random1 = priority(operand.top());
  109. }
  110. operand.push(expr[i]);
  111. }
  112. }
  113. i++;
  114. }
  115. while(operand.top() != '#'){
  116. char temp = operand.pop();
  117. answer.push_back(temp);
  118. }
  119. return answer;
  120. }
  121.  
  122. vector<char> infix_to_prefix(vector<char> expr){
  123. vector<char> temp;
  124. for(int i=expr.size()-1;i>-1;i--){
  125. //cout<<"i AM HERE"<<endl;
  126. if(expr[i]=='('){
  127. temp.push_back(')');
  128. } else if(expr[i]==')'){
  129. temp.push_back('(');
  130. } else{
  131. temp.push_back(expr[i]);
  132. }
  133. }
  134. vector<char> temp2 = infix_to_postfix(temp);
  135. reverse(temp2.begin(),temp2.end());
  136. return temp2;
  137. }
  138.  
  139. int main() {
  140. vector<char> expression;
  141. expression.push_back('a');expression.push_back('+');expression.push_back('(');expression.push_back('b');expression.push_back('*');expression.push_back('c');expression.push_back('-');expression.push_back('(');expression.push_back('d');expression.push_back('/');expression.push_back('e');expression.push_back('-');expression.push_back('f');expression.push_back(')');expression.push_back('*');expression.push_back('g');expression.push_back(')');expression.push_back('*');expression.push_back('h');//expression.push_back('-');expression.push_back('i');
  142. for(int i=0;i<expression.size();i++){
  143. cout<<expression[i];
  144. }
  145. cout<<endl;
  146. vector<char> postfix;
  147. postfix=infix_to_postfix(expression);
  148. for(int i=0;i<postfix.size();i++){
  149. cout<<postfix[i];
  150. }
  151. cout<<endl;
  152. //cout<<expression[0];
  153. vector<char> prefix = infix_to_prefix(expression);
  154. for(int i=0;i<prefix.size();i++){
  155. cout<<prefix[i];
  156. }
  157. cout<<endl;
  158. return 0;
  159. }
Add Comment
Please, Sign In to add comment