用棧來實現簡易版中綴表示式的計算器

2021-10-02 21:10:54 字數 1827 閱讀 5523

1.什麼是棧

先進後出,元素的刪除和插入只能在同一端的一種線性表

2.棧的實現方式

陣列和鍊錶都可以,本次使用陣列

3.什麼是中綴表示式

3+2-1*6+10

4.**:

/**

* @author shengjk1

* @date 2020/2/13

*/public class calcaulator else

} else

} else else }}

//讓 index +1,並判斷是否掃瞄到 exoression 最後

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);

} system.out.printf("表示式 %s = %d ", expression, numstack.pop()); }}

class arraystack1

// 棧滿

public boolean isfull()

//棧空

public boolean isempty()

//檢視當前棧頂的值

public int peek()

//入棧

public void push(int element)

top++;

stack[top] = element; }

//出棧

public int pop()

int temp = stack[top];

// stack[top]=null; 防止記憶體洩露

top--;

return temp; }

// public void list()

for (int i = top; i >= 0; i--) }

//返回運算子的優先順序 假設優先順序越高返回的數字越大

public int priority(int oper) else if (oper == '+' || oper == '-') else }

/*** @param val

* @return

*/public boolean isoper(char val)

/*** 計算

* * @param num1

* @param num2

* @param oper

* @return

*/public int cal(int num1, int num2, int oper)

return res;

}}

5.棧的使用場景:

1.遞迴

2.方法呼叫

3.表示式的轉化和求值

4.二叉樹遍歷

5.圖的深度優先遍歷

6.逆序輸出 如 單鏈表的反轉

6.面試題

如何用兩個棧達到乙個佇列的效果

C用棧實現中綴表示式轉字尾表示式

include include include define maxsize 100 設順序表的最大長度為100,可依具體情況分配空間 typedef char datatype typedef struct datatype data maxsize int top 棧頂指標 seqstack 順...

用陣列順序棧實現表示式運算 中綴表示式

只有關鍵的運算部分有 只要例項化,棧是根據教科書上的寫的,如果要用stl可以修改下就可以用,這個是中序表示式的運算,由於按照老師要求,可能寫的有點繁瑣.include include seqstack.h 教科書上的順序陣列棧,改為相應的stl棧函式就可以直接例項化呼叫class calculato...

用棧實現中綴表示式轉換為字尾表示式

思路 1.從左到右獲取中綴表示式 2.的優先順序最高,遇到直接入棧,直到遇到比他優先順序低的,依次出棧 3.遇到直接入棧,等遇到右括號 後,將 棧的運算子出棧輸出,出棧不輸出 4.如果棧空,直接入棧,否則將棧中優先順序不低於它們的運算子依次彈出,直到棧空或遇到 為止 如下所示 中綴轉字尾 void ...