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;
- 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 SLLNode<E> {
- protected E element;
- protected SLLNode<E> succ;
- public SLLNode(E elem, SLLNode<E> succ) {
- this.element = elem;
- this.succ = succ;
- }
- @Override
- public String toString() {
- return element.toString();
- }
- }
- 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 {
- public static int postFix(String exp[]){
- ArrayStack <Integer> stack = new ArrayStack<Integer> (exp.length);
- for (int i =0 ;i<exp.length; i++){
- if (exp[i].equals("+") || exp[i].equals("-") || exp[i].equals("*") || exp[i].equals("/")){
- if(exp[i].equals("*")){
- int desno = stack.pop();
- int levo = stack.pop();
- int mnozi = levo*desno;
- stack.push(mnozi);
- }
- if(exp[i].equals("+")){
- int soberi = 1000;
- int desno = stack.pop();
- int levo = stack.pop();
- soberi = levo+desno;
- stack.push(soberi);
- }
- if(exp[i].equals("/")){
- int desno= stack.pop();
- int levo = stack.pop();
- int deli = levo/desno;
- stack.push(deli);
- }
- if(exp[i].equals("-")){
- int levo = stack.pop();
- int desno = stack.pop();
- int odzemi = desno-levo;
- stack.push(odzemi);
- }
- }
- else{
- int a = Integer.parseInt(exp[i]);
- stack.push(a);
- }
- }
- int kraj = stack.peek();
- return kraj;
- }
- public static void main(String[] args) throws Exception{
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String [] expression = br.readLine().split(" ");;
- //char exp[] = expression.toCharArray();
- System.out.println(postFix(expression));
- br.close();
- }
- }
Add Comment
Please, Sign In to add comment