Advertisement
Stamenco

АПС - Постфикс нотација

Nov 16th, 2020
675
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.05 KB | None | 0 0
  1. /* Постфикс нотација
  2. Да се напише алгоритам кој ќе врши евалуација на израз во постфикс нотација.
  3.  
  4. На влез се чита низа од знаци за изразот (стринг), а на излез се печати вредноста на изразот по евалуацијата.
  5.  
  6. Име на класата (Java): PostFixEvaluation */
  7. ----------------------------------------------------------------------------------------------------------------------------
  8.  
  9. import java.io.BufferedReader;
  10. import java.io.InputStreamReader;
  11. import java.util.NoSuchElementException;
  12.  
  13. public class PostFixEvaluation {
  14.  
  15.     public static void main(String[] args) throws Exception {
  16.  
  17.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  18.  
  19.         String expression = br.readLine();
  20.  
  21.         LinkedStack<Integer> stack = new LinkedStack<Integer>();
  22.         String[] split = expression.split(" ");
  23.  
  24.         for (String s : split) {
  25.             if (Character.isDigit(s.charAt(0)))
  26.                 stack.push(Integer.parseInt(s));
  27.             else if (isOperator(s.charAt(0))) {
  28.                 stack.push(calculate(stack.pop(), stack.pop(), s.charAt(0)));
  29.             }
  30.         }
  31.         if (!stack.isEmpty())
  32.             System.out.println(stack.pop());
  33.  
  34.         br.close();
  35.  
  36.     }
  37.  
  38.     private static int calculate(int number1, int number2, char c) {
  39.         switch (c) {
  40.             case '+':
  41.                 return (number2 + number1);
  42.             case '-':
  43.                 return (number2 - number1);
  44.             case '*':
  45.                 return (number2 * number1);
  46.             case '/':
  47.                 return (number2 / number1);
  48.             case '%':
  49.                 return (number2 % number1);
  50.             default:
  51.                 return 0;
  52.         }
  53.     }
  54.  
  55.     public static boolean isOperator(char c) {
  56.         return c == '+' || c == '-' || c == '*' || c == '/' || c == '%';
  57.     }
  58. }
  59.  
  60. class SLLNode<E> {
  61.     protected E element;
  62.     protected SLLNode<E> succ;
  63.  
  64.     public SLLNode(E elem, SLLNode<E> succ) {
  65.         this.element = elem;
  66.         this.succ = succ;
  67.     }
  68.  
  69.     @Override
  70.     public String toString() {
  71.         return element.toString();
  72.     }
  73. }
  74.  
  75. class LinkedStack<E> {
  76.     private int count = 0;
  77.     private SLLNode<E> top;
  78.  
  79.     public LinkedStack() {
  80.         top = null;
  81.     }
  82.  
  83.     public boolean isEmpty() {
  84.         return (top == null);
  85.     }
  86.  
  87.     public E peek() {
  88.         if (top == null)
  89.             throw new NoSuchElementException();
  90.         return top.element;
  91.     }
  92.  
  93.     public void clear() {
  94.         top = null;
  95.     }
  96.  
  97.     public void push(E x) {
  98.         count++;
  99.         top = new SLLNode<E>(x, top);
  100.  
  101.     }
  102.  
  103.     public E pop() {
  104.         if (top == null)
  105.             throw new NoSuchElementException();
  106.         E topElem = top.element;
  107.         top = top.succ;
  108.         count--;
  109.         return topElem;
  110.  
  111.     }
  112.  
  113.     public int getSize() {
  114.         return count;
  115.     }
  116.  
  117. }
  118.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement