1.使用乙個數字棧乙個符號棧;
2.通過乙個index值遍歷表示式;
3.如發現是數字,就直接放入數字棧;
4.如發現是符號,進行優先順序比較,如果當前的操作符的優先順序小於或者等於棧頂的操作符,就需要從數字棧中pop兩個數字,從符號棧中pop乙個符號進行計算,將得到的結果放入數字棧,將當前的符號放入符號棧,如果操作符優先順序大於棧頂的操作符,則直接入符號棧;
5.當表示式掃瞄完畢,就順序的從數棧和符號中pop出相應的數字和符號進行運算
6.最後數字棧只有乙個數字,即為所求結果
在迴圈裡面考慮多位數
棧的結構
package com.company;
public class arraystack
public boolean isfull()
public boolean isempty()
//入棧
public void push(int value)
top++;
stack[top]=value;
}//出棧
public int pop()
int value = stack[top];
top--;
return value;
}public void list()
for(int i=top;i>=0;i--)
}//確定優先順序
public int priority(int ope)else if(ope=='+'||ope=='-')else
}public int peek()
//判斷是否為運算子
public boolean isope(char value)
//計算方法
public int cal(int n1,int n2,int ope)
return res;
}}
計算邏輯package com.company;
public class main else
} else
}else else }}
index++;
if(index>=expression.length())
}while (true)
n1=numstack.pop();
n2=numstack.pop();
ope=opestack.pop();
res = numstack.cal(n1,n2,ope);
numstack.push(res);
}system.out.printf("表示式%s = %d",expression,numstack.pop());
}}
使用棧計算中綴表示式
這裡只能用於計算十以內的表示式 內容 運用棧對中綴表示式求值 include include include define maxsize 100 char oper maxsize 操作符棧 int topoper 1 棧頂指標 int nums maxsize 數字棧 int topnums 1...
計算表示式 棧
問題 現在有乙個合法的二進位制表示式,請計算出該表示式的值 input 輸入一行字串,表示乙個二進位制表示式。長度不超過 100,000 ouput 輸出表示式的值 input output 0 1 0 1 1 0 1 1 兩種方法 1 被動 遇到右括號再進行運算,直至左括號 include inc...
使用棧完成表示式的計算
使用棧完成表示式的計算思路 1 通過乙個index值,來遍歷我們的表示式 2 如果我們發現是乙個數字,就直接入數棧 3 如果掃瞄到的是乙個符號,就分如下情況 3.1 如果發現當前的符號棧為空,就直接入棧 3.2 如果符號棧有操作符,就進行比較,如果當前的操作符的優先順序小於或者 等於棧中的操作符,就...