网络知识 娱乐 java栈容器Stack类

java栈容器Stack类

/**

* Stack类extends Vector 栈容器

* 扩充了五个方法 push() peek() pop() empty() search()

* 栈中的方法遵循后进先出 main方法需要等所有方法执行完弹出后才会弹出 方法的递归每一层都要等下一层结束/弹出才能结束/弹出

* 后进的方法位于栈顶 弹出顺序从栈顶往栈底

*/

public class TestStack {

public static void main(String[] args) {

Stack<String> st1 = new 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<String> s = new Stack<>();

for (int i = 0;i<str.length();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<Char> 直接比较字符

}else {

//如果s为空说明字符串中缺少左括号 不对称

return false;

}

}

}

// if (!s.empty()){

// //如果字符串遍历完,容器中还有括号没被pop说明字符串左右括号数量不对等

// return false;

// }

// return true;对称返回true

return s.empty();

//判断s是否为空的结果决定了是否对称,为空则对称,不为空则不对称,所以直接返回s.empty()即为对称性的结果

}

}