PS:
1.這篇以數組為方式寫的棧其實是為了給:文章位址作補充關于棧的詳細解釋可以參考這篇文章
2.下面有關于逆波蘭式求解數學表達式的代碼
import java.util.*;
public class arithmetic {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
stack Stack=new stack(4); //建立一個棧的對象
Stack.pop();//在空的情況下出個棧試試
for(int i=0;i<4;i++) {//壓棧
Stack.push(sc.nextInt());
}
Stack.push(4);//在棧已經滿的情況下壓棧
for(int i=0;i<4;i++) {//出棧
Stack.pop();
}
System.out.println("This stack whether empty "+Stack.Empty());
}
}
class stack{
int size; //棧大小
int[] arrstack;//建構的棧數組
int top=-1;//棧頂指針用來記錄目前棧裡面的位置
public stack(int size) { // 建立構造方法同時也是棧的大小輸入點
this.size=size;
this.arrstack=new int[this.size];
}
public boolean Empty() { //判斷棧大小是否為空
return this.top==-1;
}
public boolean Full() { //判斷棧是否以滿
return this.top==this.size-1;
}
public void push(int value) { //壓棧
if(Full()) { //壓棧前先判斷是否棧裡面元素已滿
System.out.println("sorry stack is full");
return ;
}
top++;
arrstack[top]=value; //把剛輸入的元素放到棧頂
}
public void pop() { //出棧
if(Empty()) { //判斷棧是否為空
System.out.println("sorry stack is empty");
return ;
}
System.out.println(arrstack[top]);
top--; //将指針下移
}
}
逆波蘭式求解數學表達式
import java.util.*;
public class arithmetic {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String equation=sc.next();
stack Stack=new stack(equation.length());
char[] arr=equation.toCharArray();//建立字元型數組因為一會要判斷+,-,*,/
for(char i:arr) {
int tmp=Integer.valueOf(i);//尋找數組元素的ASCLL主要是判斷是數組還是運算符
if(tmp>=48&&tmp<=57) {//如果是數字就轉為整型存入棧裡
String t=String.valueOf(i);
int int_t=Integer.valueOf(t);
Stack.push(int_t);
}
else {
if(tmp==Integer.valueOf('-')) {
int second=Stack.pop();//先出來的是減數
int first=Stack.pop();//接着是被減數
int result=first-second;
Stack.push(result);//将結果入棧
}
if(tmp==Integer.valueOf('+')) {
int second=Stack.pop();
int first=Stack.pop();
int result=first+second;
Stack.push(result);
}
if(tmp==Integer.valueOf('*')) {
int second=Stack.pop();
int first=Stack.pop();
int result=first*second;
Stack.push(result);
}
if(tmp==Integer.valueOf('/')) {
int second=Stack.pop();
int first=Stack.pop();
int result=first/second;
Stack.push(result);
}
}
}
System.out.println(Integer.valueOf(Stack.pop()));
}
}
class stack{
int size; //棧大小
int[] arrstack;//建構的棧數組
int top=-1;//棧頂指針用來記錄目前棧裡面的位置
public stack(int size) { // 建立構造方法同時也是棧的大小輸入點
this.size=size;
this.arrstack=new int[this.size];
}
public boolean Empty() { //判斷棧大小是否為空
return this.top==-1;
}
public boolean Full() { //判斷棧是否以滿
return this.top==this.size-1;
}
public void push(int value) { //壓棧
if(Full()) { //壓棧前先判斷是否棧裡面元素已滿
System.out.println("sorry stack is full");
return ;
}
top++;
arrstack[top]=value; //把剛輸入的元素放到棧頂
}
public int pop() { //出棧
if(Empty()) { //判斷棧是否為空
System.out.println("sorry stack is empty");
return -1;
}
int ans=arrstack[top];
//System.out.println(arrstack[top]);
top--; //将指針下移
return ans;
}
}