중위 표현식을 후위 표현식으로 변환하려면 괄호를 주의 깊게 처리해야 합니다. 괄호가 있으면 올바른 작업 순서를 결정하는 데 어려움이 있습니다. 이 문제를 해결하려면 다음 접근 방식을 사용할 수 있습니다.
왼쪽 괄호 푸시: 왼쪽 괄호가 나타나면 이를 연산자 스택으로 푸시합니다.
오른쪽 괄호 처리: 오른쪽 괄호:
다음 Java 코드는 toPostFix() 메서드를 수정하여 괄호를 처리하는 방법을 보여줍니다. :
public String toPostFix() { StringBuilder postfixstr = new StringBuilder(); Stack<Token> in_fix = new Stack<>(); Stack<Token> post_fix = new Stack<>(); for (int i = tokens.length - 1; i >= 0; i--) { t = new Token(tokens[i]); in_fix.push(t); } //there are still tokens to process while (!in_fix.empty()) { // is a number if (in_fix.peek().type == 1) { postfixstr.append(in_fix.pop().toString()); } // is an operator and the stack is empty else if (in_fix.peek().type == 3 && post_fix.empty()) { post_fix.push(in_fix.pop()); } // is an operator that has higher priority than the operator on the stack else if (in_fix.peek().type == 3 && in_fix.peek().isOperator() > post_fix.peek().isOperator()) { post_fix.push(in_fix.pop()); } // is an operator that has lower priority than the operator on the stack else if (in_fix.peek().type == 3 && in_fix.peek().isOperator() <= post_fix.peek().isOperator()) { postfixstr.append(post_fix.pop()); post_fix.push(in_fix.pop()); } // opening ( else if (in_fix.peek().type == 4) { post_fix.push(in_fix.pop()); } // closing ) else if(in_fix.peek().type == 5){ while(!(post_fix.isEmpty() || post_fix.peek().type == 4)){ postfixstr.append(post_fix.pop()); } if (post_fix.isEmpty()) ; // ERROR - unmatched ) else post_fix.pop(); // pop the ( in_fix.pop(); // pop the ) } //puts the rest of the stack onto the output string if (in_fix.empty()) { while (!post_fix.empty()) { postfixstr.append(post_fix.pop()); } } } return postfixstr.toString(); }
이러한 단계를 구현하면 toPostFix() 메서드는 다음과 같은 표현식을 효과적으로 처리할 수 있습니다. 괄호를 사용하여 올바른 연산 순서를 보장하고 원하는 후위 표현식을 생성합니다.
위 내용은 중위에서 후위로의 변환에서 괄호를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!