演算法學習第五日之用棧實現綜合計算器(中綴表示式)

2022-07-07 21:12:11 字數 1664 閱讀 5362

目錄棧實現綜合計算器(中綴表示式)

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 問題過於複雜...