/**
* Stack类extends Vector 栈容器
* 扩充了五个方法 push() peek() pop() empty() search()
* 栈中的方法遵循后进先出 main方法需要等所有方法执行完弹出后才会弹出 方法的递归每一层都要等下一层结束/弹出才能结束/弹出
* 后进的方法位于栈顶 弹出顺序从栈顶往栈底
*/
public class TestStack {
public static void main(String[] args) {
Stack
//实例化栈容器是为了使用Stack的五种方法 使用List引用的话无法调用这些方法 这里需要用Stack引用
st1.push("a");
//向栈容器中添加item 替代Vector的.add
st1.push("b");
//每一个新添加的item都会位于栈顶 1位 栈容器从1开始算位置
System.out.println(st1);
//打印结果仍为[a,b] 但这不符合栈容器的用法
st1.push("c");
//将item推进栈中
System.out.println(st1.search("c")+"结果为1 最后添加的c会位于栈顶 1位");
System.out.println(st1.search("a")+"结果为3 目前有三个item 最早添加的a位于最下侧 3位");
//.search()方法从栈顶往栈底查找返回匹配的第一个元素,无论底下是否有重复元素都只会返回第一个
String pop1 = st1.pop();
System.out.println(pop1);
//.pop()会将栈顶的item弹出 并返回该item c在栈顶 结果为c 弹出后b在栈顶
System.out.println(st1.peek());
//peek偷窥 返回栈顶的item但不删除 结果为b 固定查看栈顶的item
System.out.println(st1.empty());
//.empty()判断栈容器是否为空 替代Vector的.isEmpty()
//利用Stack判断对称性
String str = "..{...[...(...)....]....}....(...).....[....]";
//模拟一段代码的语句,这里用...代替代码的字符,只看三种括号,代码中的括号一定是对称的,有左括号就有右括号
System.out.println(symmetry(str));
//symmetry对称性 这里忽略...判断括号的对称性 括号是成对使用的 并且遵守后进先出
// 这个方法用于判断语句结构的问题 如左括号和右括号数量不一致、语句中途在没有左括号的情况下出现右括号
}
static boolean symmetry(String str){
Stack
for (int i = 0;i //.length()字符串的长度 char c = str.charAt(i); //返回index位的字符 if (c=='{'){ s.push("}"); } if (c=='['){ s.push("]"); } if (c=='('){ s.push(")"); } //括号一定是先写左括号 每一个左括号都应当对应一个右括号 //当出现左括号 向Stack栈容器中添加一个右括号 当出现右括号 从Stack中pop右括号 if (c=='}'||c==']'||c==')'){ if (!s.empty()) { String pop = s.pop(); //弹出栈顶的括号 要弹出就要确保容器中有元素 先判定是否为空 if (pop.charAt(0) != c) { //弹出的字符串为一个右括号 对字符串取0位字符即将字符串括号转化为字符 //如果先出的不是最后入的括号种类 说明符号不对称 return false; } // String cTemp = ""+c;也可以将字符c转换为字符串判定 // if(!cTemp.equals(s.pop()))return false; // 又或者s定义为Stack }else { //如果s为空说明字符串中缺少左括号 不对称 return false; } } } // if (!s.empty()){ // //如果字符串遍历完,容器中还有括号没被pop说明字符串左右括号数量不对等 // return false; // } // return true;对称返回true return s.empty(); //判断s是否为空的结果决定了是否对称,为空则对称,不为空则不对称,所以直接返回s.empty()即为对称性的结果 } }
留言与评论(共有 0 条评论)
“”