資料結構與演算法 6 棧實現綜合計算器

2022-09-19 04:45:10 字數 1891 閱讀 4623

棧(stack)又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

在調往子程式前,會先將下個指令的位址存放到堆疊中,直到子程式執行完後再將位址丟擲,以回到原來的程式。

和子程式的呼叫類似,除了村下個指令的位址外,還要存放引數,區域變數等資料。

中綴表示式轉字尾表示式

(1)arraystack工具類

package datastructure.stack;

public class arraystack

//增加乙個方法,可以返回當前棧頂的值, 但是不是真正的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;}}

(2)測試類

package datastructure.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);}}

3、控制台輸出

棧實現綜合計算

主函式測試 public static void main string args else else else else index if index expression.length 表示式掃瞄完畢,就順序的從數棧和符號棧中pop出相應的數和符號,並執行 while true num1 num...

棧實現綜合計算器

package com.dai.stack public class calculator else else else else index 1 是否掃瞄到最後 index if index expression.length while true num1 numstack.pop num2 n...

棧實現綜合計算器

思路分析 實現 package stack public class calculator else else else else 讓index 1,並判斷是否掃瞄到expression最後 index if index expression.length while true num1 numst...