Advertisement
SlavkovB

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

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