fensa08

#APS Lab 1/5

Nov 9th, 2019
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.16 KB | None | 0 0
  1. Постфикс нотација Problem 1 (0 / 0)
  2.  
  3. Да се напише алгоритам кој ќе врши евалуација на израз во постфикс нотација.
  4.  
  5. На влез се чита низа од знаци за изразот (стринг), а на излез се печати вредноста на изразот по евалуацијата.
  6.  
  7. Име на класата (Java): PostFixEvaluation
  8.  
  9.  
  10. ==================================================================================================================================
  11.  
  12. import java.io.BufferedReader;
  13. import java.io.InputStreamReader;
  14. import java.util.NoSuchElementException;
  15.  
  16. public class PostFixEvaluation {
  17.  
  18.     static interface Queue<E> {
  19.  
  20.         // Elementi na redicata se objekti od proizvolen tip.
  21.  
  22.         // Metodi za pristap:
  23.  
  24.         public boolean isEmpty ();
  25.         // Vrakja true ako i samo ako redicata e prazena.
  26.  
  27.         public int size ();
  28.         // Ja vrakja dolzinata na redicata.
  29.  
  30.         public E peek ();
  31.         // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  32.  
  33.         // Metodi za transformacija:
  34.  
  35.         public void clear ();
  36.         // Ja prazni redicata.
  37.  
  38.         public void enqueue (E x);
  39.         // Go dodava x na kraj od redicata.
  40.  
  41.         public E dequeue ();
  42.         // Go otstranuva i vrakja pochetniot element na redicata.
  43.  
  44.     }
  45.  
  46.     static class LinkedQueue<E> implements Queue<E> {
  47.  
  48.         // Redicata e pretstavena na sledniot nacin:
  49.         // length go sodrzi brojot na elementi.
  50.         // Elementite se zachuvuvaat vo jazli dod SLL
  51.         // front i rear se linkovi do prviot i posledniot jazel soodvetno.
  52.         SLLNode<E> front, rear;
  53.         int length;
  54.  
  55.         // Konstruktor ...
  56.  
  57.         public LinkedQueue () {
  58.             clear();
  59.         }
  60.  
  61.         public boolean isEmpty () {
  62.             // Vrakja true ako i samo ako redicata e prazena.
  63.             return (length == 0);
  64.         }
  65.  
  66.         public int size () {
  67.             // Ja vrakja dolzinata na redicata.
  68.             return length;
  69.         }
  70.  
  71.         public E peek () {
  72.             // Go vrakja elementot na vrvot t.e. pocetokot od redicata.
  73.             if (front == null)
  74.                 throw new NoSuchElementException();
  75.             return front.element;
  76.         }
  77.  
  78.         public void clear () {
  79.             // Ja prazni redicata.
  80.             front = rear = null;
  81.             length = 0;
  82.         }
  83.  
  84.         public void enqueue (E x) {
  85.             // Go dodava x na kraj od redicata.
  86.             SLLNode<E> latest = new SLLNode<E>(x, null);
  87.             if (rear != null) {
  88.                 rear.succ = latest;
  89.                 rear = latest;
  90.             } else
  91.                 front = rear = latest;
  92.             length++;
  93.         }
  94.  
  95.         public E dequeue () {
  96.             // Go otstranuva i vrakja pochetniot element na redicata.
  97.             if (front != null) {
  98.                 E frontmost = front.element;
  99.                 front = front.succ;
  100.                 if (front == null)  rear = null;
  101.                 length--;
  102.                 return frontmost;
  103.             } else
  104.                 throw new NoSuchElementException();
  105.         }
  106.  
  107.     }
  108.  
  109.     static class SLLNode<E> {
  110.         protected E element;
  111.         protected SLLNode<E> succ;
  112.  
  113.         public SLLNode(E elem, SLLNode<E> succ) {
  114.             this.element = elem;
  115.             this.succ = succ;
  116.         }
  117.  
  118.         @Override
  119.         public String toString() {
  120.             return element.toString();
  121.         }
  122.     }
  123.  
  124.  
  125.     static interface Stack<E> {
  126.  
  127.         // Elementi na stekot se objekti od proizvolen tip.
  128.  
  129.         // Metodi za pristap:
  130.  
  131.         public boolean isEmpty ();
  132.         // Vrakja true ako i samo ako stekot e prazen.
  133.  
  134.         public E peek ();
  135.         // Go vrakja elementot na vrvot od stekot.
  136.  
  137.         // Metodi za transformacija:
  138.  
  139.         public void clear ();
  140.         // Go prazni stekot.
  141.  
  142.         public void push (E x);
  143.         // Go dodava x na vrvot na stekot.
  144.  
  145.         public E pop ();
  146.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  147.     }
  148.  
  149.     static class LinkedStack<E> implements Stack<E> {
  150.  
  151.         //Stekot e pretstaven na sledniot nacin: top e link do prviot jazol
  152.         // na ednostrano-povrzanata lista koja sodrzi gi elementite na stekot .
  153.         private SLLNode<E> top;
  154.  
  155.         public LinkedStack () {
  156.             // Konstrukcija na nov, prazen stek.
  157.             top = null;
  158.         }
  159.  
  160.         public boolean isEmpty () {
  161.             // Vrakja true ako i samo ako stekot e prazen.
  162.             return (top == null);
  163.         }
  164.  
  165.         public E peek () {
  166.             // Go vrakja elementot na vrvot od stekot.
  167.             if (top == null)
  168.                 throw new NoSuchElementException();
  169.             return top.element;
  170.         }
  171.  
  172.         public void clear () {
  173.             // Go prazni stekot.
  174.             top = null;
  175.         }
  176.  
  177.         public void push (E x) {
  178.             // Go dodava x na vrvot na stekot.
  179.             top = new SLLNode<E>(x, top);
  180.         }
  181.  
  182.         public E pop () {
  183.             // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  184.             if (top == null)
  185.                 throw new NoSuchElementException();
  186.             E topElem = top.element;
  187.             top = top.succ;
  188.             return topElem;
  189.         }
  190.  
  191.     }
  192.  
  193.     public static int evalExpression(char []arr){
  194.  
  195.         LinkedStack<Integer> stek = new LinkedStack<>();
  196.         LinkedQueue<String>  ispeglana = new LinkedQueue<>();
  197.  
  198.         String str = "";
  199.         for(int i = 0; i < arr.length; i++){
  200.  
  201.             if(arr[i] == ' '){
  202.                 ispeglana.enqueue(str);
  203.                 str = "";
  204.             }else{
  205.                 str += arr[i];
  206.             }
  207.  
  208.         }
  209.         ispeglana.enqueue(str);
  210.  
  211.  
  212.  
  213.  
  214.         while(!ispeglana.isEmpty()){
  215.  
  216.             String element = ispeglana.dequeue();
  217.  
  218.             if(element.equals("+")){
  219.                 int a = stek.pop();
  220.                 int b = stek.pop();
  221.                 b += a;
  222.                 stek.push(b);;
  223.             }
  224.             else if(element.equals("-")){
  225.                 int a = stek.pop();
  226.                 int b = stek.pop();
  227.                 b -= a;
  228.                 stek.push(b);;
  229.  
  230.             }
  231.             else if(element.equals("*")){
  232.                 int a = stek.pop();
  233.                 int b = stek.pop();
  234.                 b *= a;
  235.                 stek.push(b);;
  236.             }
  237.             else if(element.equals("/")){
  238.                 int a = stek.pop();
  239.                 int b = stek.pop();
  240.                 b /= a;
  241.                 stek.push(b);;
  242.             }
  243.             else{
  244.                 stek.push(Integer.parseInt(element));
  245.             }
  246.  
  247.         }
  248.  
  249.  
  250.         int x = stek.pop();
  251.         return x;
  252.  
  253.  
  254.     }
  255.  
  256.  
  257.     public static void main(String[] args) throws Exception{
  258.  
  259.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  260.  
  261.         String expression = br.readLine();
  262.         char exp[] = expression.toCharArray();
  263.  
  264.  
  265.  
  266.         System.out.println(evalExpression(exp));
  267.  
  268.  
  269.  
  270.         br.close();
  271.  
  272.     }
  273.  
  274. }
Advertisement
Add Comment
Please, Sign In to add comment