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 ...