데이터 구조의 접미사 표현 식 접미사 표현 식(자바 구현)
하지만 우리 가 계산 할 때 계산 할 표현 식 을 수 동 으로 접미사 로 바 꾸 어 계산기 에 버 릴 수 는 없 잖 아 요.그러면 계산기 가 왜 요?그 렇 죠?
다음은 접미사 표현 식 을 접미사 표현 식 으로 바 꾸 는 방법 입 니 다.
우선,노드 를 만 듭 니 다.
//노드 는 연산 자 를 저장 하 는 데 사 용 됩 니 다.이것 은 접미사 식 의 계산 과 다 릅 니 다.
public class SignNode {
String signName;
SignNode next;
public String getSignName() {
return signName;
}
public void setSignName(String signName) {
this.signName = signName;
}
public SignNode getNext() {
return next;
}
public void setNext(SignNode next) {
this.next = next;
}
}
그 다음 에 우 리 는 연산 자 를 관리 하 는 링크 를 만 들 었 다.
//연산 자의 출입 을 제어 하 는 데 주로 사 용 됩 니 다.
public class SignList {
private SignNode list;
private int length;
public SignNode element(){
return list;
}
public SignNode pop(){
SignNode signNode = new SignNode();
signNode = list;
list = list.next;
length --;
return signNode;
}
public void push(SignNode signNode){
signNode.next = list;
list = signNode;
length ++;
}
public SignNode getList() {
return list;
}
public void setList(SignNode list) {
this.list = list;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
}
다음은 진짜 조작 과 테스트 입 니 다.
public class Main {
private static Map signMap = new HashMap(); //
private static String signCol = "+-*/()";
static {
signMap.put("+", 1);
signMap.put("-", 1);
signMap.put("*", 4);
signMap.put("/", 4);
signMap.put("(", 0); // (3*2-3)
}
public static void main(String[] args) {
infix2suffix();
}
private static void infix2suffix(){
// String str = "9,+,(,3,-,1,),*,3,+,10,/,2";
String str = "9,+,(,3,*,2,-,3,),*,3,+,10,/,2";
SignList signList = new SignList();
String[] exp = str.split(",");
List result = new ArrayList();
for(int i = 0; i < exp.length; i++){
if(signCol.contains(exp[i])){
if("(".equals(exp[i])){ // (
SignNode node = new SignNode();
node.setSignName(exp[i]);
signList.push(node);
}else if(")".equals(exp[i])){
popStack(signList, result);
} else {
pushOrPopStack(signList, exp[i], result);
}
}else{ //
result.add(exp[i]);
}
}
while(signList.getLength() > 0){
SignNode node = signList.pop();
result.add(node.getSignName());
}
System.out.println(result);
}
private static void popStack(SignList signList, List result){
SignNode node = signList.pop(); //
if(!"(".equals(node.getSignName())){ // (
result.add(node.getSignName());
popStack(signList, result); //
}
}
private static void pushOrPopStack(SignList signList, String val, List result){
if(signList.getLength() != 0) { //
SignNode stackTop = signList.element(); //
if (signMap.get(stackTop.getSignName()) < signMap.get(val)) { // ,
SignNode signNode = new SignNode();
signNode.setSignName(val);
signList.push(signNode);
}else{ //
SignNode node = signList.pop();
result.add(node.getSignName()); //
pushOrPopStack(signList, val, result); //
}
}else{ //
SignNode node = new SignNode();
node.setSignName(val);
signList.push(node);
}
}
결과:[9,3,2,*,3,-,3,*,+,10,2,/,+]
만약 고려 하지 않 은 것 이 있다 면,모두 가 지적 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.