目錄棧實現綜合計算器(中綴表示式)
ps:要考慮到輸入的數字字元不止一位的問題演算法思路:
實現**:
package com.atguigu.stack;
public class calculator else
}else
} else else}}
//讓index + 1, 並判斷是否掃瞄到expression最後.
index++;
if (index >= expression.length())
} //當表示式掃瞄完畢,就順序的從 數棧和符號棧中pop出相應的數和符號,並執行.
while(true)
num1 = numstack.pop();
num2 = numstack.pop();
oper = operstack.pop();
res = numstack.cal(num1, num2, oper);
numstack.push(res);//入棧
} //將數棧的最後數,pop出,就是結果
int res2 = numstack.pop();
system.out.printf("表示式 %s = %d", expression, res2); }}
//先建立乙個棧,直接使用前面建立好
//定義乙個 arraystack2 表示棧, 需要擴充套件功能
class arraystack2
//增加乙個方法,可以返回當前棧頂的值, 但是不是真正的pop
public int peek()
//棧滿
public boolean isfull()
//棧空
public boolean isempty()
//入棧-push
public void push(int value)
top++;
stack[top] = value;
} //出棧-pop, 將棧頂的資料返回
public int pop()
int value = stack[top];
top--;
return value;
} //顯示棧的情況[遍歷棧], 遍歷時,需要從棧頂開始顯示資料
public void list()
//需要從棧頂開始顯示資料
for(int i = top; i >= 0 ; i--)
} //返回運算子的優先順序,優先順序是程式設計師來確定, 優先順序使用數字表示
//數字越大,則優先順序就越高.
public int priority(int oper) else if (oper == '+' || oper == '-') else
} //判斷是不是乙個運算子
public boolean isoper(char val)
//計算方法
public int cal(int num1, int num2, int oper)
return res; }
}
演算法學習第五日之使用遞迴解決迷宮問題
目錄使用遞迴解決迷宮問題 遞迴需要遵守的重要規則 迷宮問題示意圖 實現 package com.atguigu.recursion public class migong 左右全部置為1 for int i 0 i 8 i 設定擋板,1 表示 map 3 1 1 map 3 2 1 map 1 2 ...
資料結構與演算法 6 棧實現綜合計算器
棧 stack 又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元...
資料結構與演算法學習筆記 第五天
1 資料結構中的演算法,指的是資料結構所具備的功能。2 解決特定問題的方法,他是前輩們的一些優秀的經驗總結。把乙個大而複雜的問題,分解為很多個小的而簡單的問題,利用計算機的強大計算能力來解決問題。是函式自己呼叫自己的一種行為,可以形成迴圈呼叫,進而實現分治演算法。什麼情況下使用遞迴 1 問題過於複雜...