Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Постфикс нотација Problem 1 (1 / 29)
- //Да се напише алгоритам кој ќе врши евалуација на израз во постфикс нотација.
- //На влез се чита низа од знаци за изразот (стринг), а на излез се печати вредноста на изразот по евалуацијата.
- //Име на класата (Java): PostFixEvaluation
- //Sample input: 1 2 +
- //Sample output: 3
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.util.NoSuchElementException;
- interface Stack<E> {
- public boolean isEmpty();
- //Returns true if the stack is empty
- public E peek();
- //Returns an element from the top of the stack
- public void clear();
- //Clears the whole stack
- public void push(E o);
- //Adds an element on the top of the stack
- public E pop();
- //Returns and removes the top element of the stack
- }
- class ArrayStack<E> implements Stack<E> {
- private E[] elements;
- private int stackSize;
- public ArrayStack(int stackSize) {
- elements = (E[]) new Object[stackSize];
- stackSize = 0;
- }
- @Override
- public boolean isEmpty() {
- return (stackSize == 0);
- }
- @Override
- public E peek() {
- if(stackSize == 0)
- throw new NoSuchElementException();
- return elements[stackSize - 1];
- }
- @Override
- public void clear() {
- for (int i = 0; i < stackSize; i++) {
- elements[i] = null;
- }
- stackSize = 0;
- }
- @Override
- public void push(E o) {
- elements[stackSize++] = o;
- }
- @Override
- public E pop() {
- if(stackSize == 0)
- throw new NoSuchElementException();
- E topmost = elements[--stackSize];
- elements[stackSize] = null;
- return topmost;
- }
- public int size(){
- return stackSize;
- }
- }
- public class PostFixEvaluation {
- public static void evaluate(String expression){
- ArrayStack<String> arrayStack = new ArrayStack<>(expression.length());
- String[] string = expression.split("\\s+");
- int value1, value2 = 0;
- for (int i = 0; i < string.length; i++) {
- arrayStack.push(string[i]);
- switch (string[i]){
- case "+" : {
- arrayStack.pop();
- value2 = Integer.parseInt(arrayStack.pop());
- value1 = Integer.parseInt(arrayStack.pop());
- arrayStack.push(String.valueOf(value1 + value2));
- break;
- }
- case "-" : {
- arrayStack.pop();
- value2 = Integer.parseInt(arrayStack.pop());
- value1 = Integer.parseInt(arrayStack.pop());
- arrayStack.push(String.valueOf(value1 - value2));
- break;
- }
- case "*" : {
- arrayStack.pop();
- value2 = Integer.parseInt(arrayStack.pop());
- value1 = Integer.parseInt(arrayStack.pop());
- arrayStack.push(String.valueOf(value1 * value2));
- break;
- }
- case "/" : {
- arrayStack.pop();
- value2 = Integer.parseInt(arrayStack.pop());
- value1 = Integer.parseInt(arrayStack.pop());
- arrayStack.push(String.valueOf(value1 / value2));
- break;
- }
- }
- }
- System.out.println(arrayStack.peek());
- }
- public static void main(String[] args) throws Exception{
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String expression = br.readLine();
- char exp[] = expression.toCharArray();
- br.close();
- evaluate(expression);
- }
- }
Add Comment
Please, Sign In to add comment