欢迎光临散文网 会员登陆 & 注册

java栈容器Stack类

2022-07-23 18:53 作者:虚云幻仙  | 我要投稿

/**
* 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()即为对称性的结果

   }
}

java栈容器Stack类的评论 (共 条)

分享到微博请遵守国家法律