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;
- 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{
- public static void main(String[] args) throws Exception {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String expression = br.readLine();
- char exp[] = expression.toCharArray();
- int n = exp.length;
- ArrayStack<Integer> stek = new ArrayStack<Integer>(n);
- String s = "";
- for (int i = 0; i < n; i++) {
- if (Character.isDigit(exp[i])) {
- s += exp[i];
- if (exp[i + 1] == ' ') {
- stek.push(Integer.parseInt(s));
- s = "";
- }
- } else if (exp[i] == '+' || exp[i] == '-' || exp[i] == '*' || exp[i] == '/') {
- int x = stek.pop();
- int y = stek.pop();
- if (exp[i] == '+')
- stek.push(x + y);
- if (exp[i] == '-')
- stek.push(y - x);
- if (exp[i] == '*')
- stek.push(x * y);
- if (exp[i] == '/')
- stek.push(y / x);
- }
- }
- System.out.println(stek.pop());
- br.close();
- }
- }
- Sample input
- 1 2 +
- Sample output
- 3
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement