Mitrezzz

АПС Лаб 4 Постфикс нотација

Nov 19th, 2018
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.68 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.util.NoSuchElementException;
  4.  
  5.  
  6. interface Stack<E> {
  7.  
  8.     // Elementi na stekot se objekti od proizvolen tip.
  9.  
  10.     // Metodi za pristap:
  11.  
  12.     public boolean isEmpty ();
  13.         // Vrakja true ako i samo ako stekot e prazen.
  14.  
  15.     public E peek ();
  16.         // Go vrakja elementot na vrvot od stekot.
  17.  
  18.     // Metodi za transformacija:
  19.  
  20.     public void clear ();
  21.         // Go prazni stekot.
  22.  
  23.     public void push (E x);
  24.         // Go dodava x na vrvot na stekot.
  25.  
  26.     public E pop ();
  27.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  28. }
  29.  
  30.  
  31. class SLLNode<E> {
  32.     protected E element;
  33.     protected SLLNode<E> succ;
  34.  
  35.     public SLLNode(E elem, SLLNode<E> succ) {
  36.         this.element = elem;
  37.         this.succ = succ;
  38.     }
  39.  
  40.     @Override
  41.     public String toString() {
  42.         return element.toString();
  43.     }
  44. }
  45.  
  46.  
  47. class ArrayStack<E> implements Stack<E> {
  48.  
  49.     // Stekot e pretstaven na sledniot nacin:
  50.     //depth e dlabochinata na stekot, a
  51.     // elems[0...depth-1] se negovite elementi.
  52.     private E[] elems;
  53.     private int depth;
  54.  
  55.     @SuppressWarnings("unchecked")
  56.     public ArrayStack (int maxDepth) {
  57.         // Konstrukcija na nov, prazen stek.
  58.         elems = (E[]) new Object[maxDepth];
  59.         depth = 0;
  60.     }
  61.  
  62.  
  63.     public boolean isEmpty () {
  64.         // Vrakja true ako i samo ako stekot e prazen.
  65.         return (depth == 0);
  66.     }
  67.  
  68.  
  69.     public E peek () {
  70.         // Go vrakja elementot na vrvot od stekot.
  71.         if (depth == 0)
  72.             throw new NoSuchElementException();
  73.         return elems[depth-1];
  74.     }
  75.  
  76.  
  77.     public void clear () {
  78.         // Go prazni stekot.
  79.         for (int i = 0; i < depth; i++)  elems[i] = null;
  80.         depth = 0;
  81.     }
  82.  
  83.  
  84.     public void push (E x) {
  85.         // Go dodava x na vrvot na stekot.
  86.         elems[depth++] = x;
  87.     }
  88.  
  89.  
  90.     public E pop () {
  91.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  92.         if (depth == 0)
  93.             throw new NoSuchElementException();
  94.         E topmost = elems[--depth];
  95.         elems[depth] = null;
  96.         return topmost;
  97.     }
  98. }
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109. public class PostFixEvaluation {
  110.        
  111.    
  112.     public static int postFix(String exp[]){
  113.        
  114.         ArrayStack <Integer> stack = new ArrayStack<Integer> (exp.length);
  115.        
  116.         for (int i =0 ;i<exp.length; i++){
  117.            
  118.             if (exp[i].equals("+") || exp[i].equals("-") || exp[i].equals("*") || exp[i].equals("/")){
  119.                
  120.                
  121.                
  122.                 if(exp[i].equals("*")){
  123.                     int desno = stack.pop();
  124.                     int levo = stack.pop();
  125.                     int mnozi = levo*desno;
  126.                     stack.push(mnozi);
  127.                    
  128.                 }
  129.                 if(exp[i].equals("+")){
  130.                
  131.                     int soberi = 1000;
  132.                     int desno = stack.pop();
  133.                     int levo = stack.pop();
  134.                      soberi = levo+desno;
  135.                     stack.push(soberi);
  136.                    
  137.                 }
  138.                 if(exp[i].equals("/")){
  139.                     int desno= stack.pop();
  140.                     int levo = stack.pop();
  141.                     int deli = levo/desno;
  142.                     stack.push(deli);
  143.                    
  144.                 }
  145.                 if(exp[i].equals("-")){
  146.                    
  147.                     int levo = stack.pop();
  148.                     int desno = stack.pop();
  149.                     int odzemi = desno-levo;
  150.                     stack.push(odzemi);
  151.                
  152.                 }
  153.                
  154.                
  155.             }
  156.             else{
  157.                
  158.                 int a = Integer.parseInt(exp[i]);
  159.                
  160.                 stack.push(a);
  161.                
  162.             }
  163.            
  164.         }
  165.        
  166.         int kraj = stack.peek();
  167.        
  168.         return kraj;
  169.     }
  170.    
  171.    
  172.    
  173.    
  174.    
  175.     public static void main(String[] args) throws Exception{
  176.          
  177.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  178.        
  179.         String [] expression = br.readLine().split(" ");;
  180.         //char exp[] = expression.toCharArray();
  181.        
  182.        
  183.         System.out.println(postFix(expression));
  184.        
  185.         br.close();
  186.  
  187.     }
  188.  
  189. }
Add Comment
Please, Sign In to add comment