Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.util.NoSuchElementException;
- import java.io.IOException;
- interface Stack<E> {
- // Elementi na stekot se objekti od proizvolen tip.
- // Metodi za pristap:
- public boolean isEmpty ();
- // Vrakja true ako i samo ako stekot e prazen.
- public E peek ();
- // Go vrakja elementot na vrvot od stekot.
- // Metodi za transformacija:
- public void clear ();
- // Go prazni stekot.
- public void push (E x);
- // Go dodava x na vrvot na stekot.
- public E pop ();
- // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
- }
- class ArrayStack<E> implements Stack<E> {
- // Stekot e pretstaven na sledniot nacin:
- //depth e dlabochinata na stekot, a
- // elems[0...depth-1] se negovite elementi.
- private E[] elems;
- private int depth;
- @SuppressWarnings("unchecked")
- public ArrayStack (int maxDepth) {
- // Konstrukcija na nov, prazen stek.
- elems = (E[]) new Object[maxDepth];
- depth = 0;
- }
- public boolean isEmpty () {
- // Vrakja true ako i samo ako stekot e prazen.
- return (depth == 0);
- }
- public E peek () {
- // Go vrakja elementot na vrvot od stekot.
- if (depth == 0)
- throw new NoSuchElementException();
- return elems[depth-1];
- }
- public void clear () {
- // Go prazni stekot.
- for (int i = 0; i < depth; i++) elems[i] = null;
- depth = 0;
- }
- public void push (E x) {
- // Go dodava x na vrvot na stekot.
- elems[depth++] = x;
- }
- public E pop () {
- // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
- if (depth == 0)
- throw new NoSuchElementException();
- E topmost = elems[--depth];
- elems[depth] = null;
- return topmost;
- }
- }
- public class PostFixEvaluation {
- /**
- * @param args the command line arguments
- */
- public static void main(String[] args) throws IOException {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String expression = br.readLine();
- String exp[] = expression.split(" ");
- int rezultat = postFixEvaluation(exp);
- System.out.println(rezultat);
- br.close();
- }
- static boolean isOperator(String operator) {
- switch (operator) {
- case "+":
- return true;
- case "-":
- return true;
- case "*":
- return true;
- case "/":
- return true;
- default:
- return false;
- }
- }
- static boolean isOperand(String operand) {
- for (int i = 0; i < operand.toCharArray().length; ++i) {
- if (!Character.isDigit(operand.charAt(i))) {
- return false;
- }
- }
- return true;
- }
- static int postFixEvaluation(String[] phrase) {
- ArrayStack<Integer> magacin = new ArrayStack<>(1000);
- int rezultat = 0;
- for (int i = 0; i < phrase.length; ++i) {
- if (isOperand(phrase[i])) {
- magacin.push(Integer.parseInt(phrase[i]));
- } else {
- if (isOperator(phrase[i])) {
- int broj = magacin.pop();
- switch (phrase[i]) {
- case "+":
- rezultat = Math.abs(broj + magacin.pop());
- break;
- case "-":
- rezultat = Math.abs(broj - magacin.pop());
- break;
- case "*":
- rezultat = Math.abs(broj * magacin.pop());
- break;
- case "/":
- if (broj == 0 || magacin.pop() == 0) {
- //delenje so 0
- rezultat = 0;
- } else {
- rezultat = Math.abs(magacin.pop()/broj);
- break;
- }
- }
- }
- magacin.push(rezultat);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment