栈(Stack)是一种特殊的线性表,其插入和删除操作只允许在线性表的一端进行,一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(Bottom),同时把插入元素的操作称为入栈(Push),删除元素的操作称为出栈(Pop)。若栈中没有任何元素,则称为空栈。
(1)Stack来自于Vector,底层是数组
(2)Stack方法:a. java中stack只有一个无参数的构造函数
b. 方法:push(num) 入栈
pop() 栈顶元素出栈
empty() 判断栈是否为空
peek() 获取栈顶元素
search(num) 判断元素num是否在栈中,如果在返回1,不在返回-1
size()、get(index)
(3)题目:栈之括号匹配问题
public class ExpStackMatching{
public static void main(String[] args) {
String expression = "{((1+3)+2+4)+9*7}";
Boolean flag = matching(expression);
if(flag == true) {
System.out.println("匹配成功");
} else {
System.out.println("匹配失败");
}
}
public static Boolean matching(String expression) {
if(expression == null || expression == " ") {
System.out.println("输入的表达式为空或没有输入表达式");
return false;
}
Stack<Character> stack = new Stack<>();
for(int index = 0;index < expression.length(); index++) {
char c = expression.charAt(index);
if (c == '(' || c == '{') {
//入栈
stack.push(c);
} else if (c == ')' || c == '}'){
if (stack.isEmpty()) return false;
//出栈
char left = stack.pop();
if (left == '(' && c != ')') return false;
if (left == '{' && c != '}') return false;
if (left == '[' && c != ']') return false;
}
}
return stack.isEmpty();
}
}