Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Постфикс нотација
- Да се напише алгоритам кој ќе врши евалуација на израз во постфикс нотација.
- На влез се чита низа од знаци за изразот (стринг), а на излез се печати вредноста на изразот по евалуацијата.
- Име на класата (Java): PostFixEvaluation */
- ----------------------------------------------------------------------------------------------------------------------------
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.util.NoSuchElementException;
- public class PostFixEvaluation {
- public static void main(String[] args) throws Exception {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String expression = br.readLine();
- LinkedStack<Integer> stack = new LinkedStack<Integer>();
- String[] split = expression.split(" ");
- for (String s : split) {
- if (Character.isDigit(s.charAt(0)))
- stack.push(Integer.parseInt(s));
- else if (isOperator(s.charAt(0))) {
- stack.push(calculate(stack.pop(), stack.pop(), s.charAt(0)));
- }
- }
- if (!stack.isEmpty())
- System.out.println(stack.pop());
- br.close();
- }
- private static int calculate(int number1, int number2, char c) {
- switch (c) {
- case '+':
- return (number2 + number1);
- case '-':
- return (number2 - number1);
- case '*':
- return (number2 * number1);
- case '/':
- return (number2 / number1);
- case '%':
- return (number2 % number1);
- default:
- return 0;
- }
- }
- public static boolean isOperator(char c) {
- return c == '+' || c == '-' || c == '*' || c == '/' || c == '%';
- }
- }
- 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 LinkedStack<E> {
- private int count = 0;
- private SLLNode<E> top;
- public LinkedStack() {
- top = null;
- }
- public boolean isEmpty() {
- return (top == null);
- }
- public E peek() {
- if (top == null)
- throw new NoSuchElementException();
- return top.element;
- }
- public void clear() {
- top = null;
- }
- public void push(E x) {
- count++;
- top = new SLLNode<E>(x, top);
- }
- public E pop() {
- if (top == null)
- throw new NoSuchElementException();
- E topElem = top.element;
- top = top.succ;
- count--;
- return topElem;
- }
- public int getSize() {
- return count;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement