Advertisement
Kame3

Постфикс нотација 4.1

Nov 11th, 2020 (edited)
990
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.51 KB | None | 0 0
  1. Да се напише алгоритам кој ќе врши евалуација на израз во постфикс нотација.
  2.  
  3. На влез се чита низа од знаци за изразот (стринг), а на излез се печати вредноста на изразот по евалуацијата.
  4.  
  5. Име на класата (Java): PostFixEvaluation
  6.  
  7.  
  8. import java.io.BufferedReader;
  9. import java.io.InputStreamReader;
  10. import java.util.NoSuchElementException;
  11.  
  12. interface Stack<E> {
  13.  
  14.     // Elementi na stekot se objekti od proizvolen tip.
  15.  
  16.     // Metodi za pristap:
  17.  
  18.     public boolean isEmpty();
  19.     // Vrakja true ako i samo ako stekot e prazen.
  20.  
  21.     public E peek();
  22.     // Go vrakja elementot na vrvot od stekot.
  23.  
  24.     // Metodi za transformacija:
  25.  
  26.     public void clear();
  27.     // Go prazni stekot.
  28.  
  29.     public void push(E x);
  30.     // Go dodava x na vrvot na stekot.
  31.  
  32.     public E pop();
  33.     // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  34. }
  35.  
  36. class ArrayStack<E> implements Stack<E> {
  37.  
  38.     // Stekot e pretstaven na sledniot nacin:
  39.     //depth e dlabochinata na stekot, a
  40.     // elems[0...depth-1] se negovite elementi.
  41.     private E[] elems;
  42.     private int depth;
  43.  
  44.     @SuppressWarnings("unchecked")
  45.     public ArrayStack(int maxDepth) {
  46.         // Konstrukcija na nov, prazen stek.
  47.         elems = (E[]) new Object[maxDepth];
  48.         depth = 0;
  49.     }
  50.  
  51.  
  52.     public boolean isEmpty() {
  53.         // Vrakja true ako i samo ako stekot e prazen.
  54.         return (depth == 0);
  55.     }
  56.  
  57.  
  58.     public E peek() {
  59.         // Go vrakja elementot na vrvot od stekot.
  60.         if (depth == 0)
  61.             throw new NoSuchElementException();
  62.         return elems[depth - 1];
  63.     }
  64.  
  65.  
  66.     public void clear() {
  67.         // Go prazni stekot.
  68.         for (int i = 0; i < depth; i++) elems[i] = null;
  69.         depth = 0;
  70.     }
  71.  
  72.  
  73.     public void push(E x) {
  74.         // Go dodava x na vrvot na stekot.
  75.         elems[depth++] = x;
  76.     }
  77.  
  78.  
  79.     public E pop() {
  80.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  81.         if (depth == 0)
  82.             throw new NoSuchElementException();
  83.         E topmost = elems[--depth];
  84.         elems[depth] = null;
  85.         return topmost;
  86.     }
  87. }
  88.  
  89. public class PostFixEvaluation{
  90.  
  91.     public static void main(String[] args) throws Exception {
  92.  
  93.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  94.  
  95.         String expression = br.readLine();
  96.         char exp[] = expression.toCharArray();
  97.  
  98.         int n = exp.length;
  99.         ArrayStack<Integer> stek = new ArrayStack<Integer>(n);
  100.         String s = "";
  101.         for (int i = 0; i < n; i++) {
  102.             if (Character.isDigit(exp[i])) {
  103.                 s += exp[i];
  104.                 if (exp[i + 1] == ' ') {
  105.                     stek.push(Integer.parseInt(s));
  106.                     s = "";
  107.                 }
  108.             } else if (exp[i] == '+' || exp[i] == '-' || exp[i] == '*' || exp[i] == '/') {
  109.                 int x = stek.pop();
  110.                 int y = stek.pop();
  111.                 if (exp[i] == '+')
  112.                     stek.push(x + y);
  113.                 if (exp[i] == '-')
  114.                     stek.push(y - x);
  115.                 if (exp[i] == '*')
  116.                     stek.push(x * y);
  117.                 if (exp[i] == '/')
  118.                     stek.push(y / x);
  119.             }
  120.         }
  121.         System.out.println(stek.pop());
  122.         br.close();
  123.  
  124.     }
  125.  
  126. }
  127.  
  128.  
  129. Sample input
  130.  
  131. 1 2 +
  132.  
  133. Sample output
  134.  
  135. 3
  136.  
  137.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement