zoukankan      html  css  js  c++  java
  • 栈Stack(动态数组实现自定义栈)

    1、什么是栈

    栈也是一种线性结构,

    相比数组,栈对应的操作是数组的子集

    只能从一端添加元素,也只能从一端取出元素

    这一端称为栈顶

    栈是一种后进先出的数据结构。

    2、栈的应用

    1) 编辑器无处不在的Undo操作(撤销)

    2) 程序调用的系统栈

     函数A中调用函数B,函数B中调用函数C。

    如果C函数执行完了,从栈中查看是B2,接着执行B2的下面1行代码。

    如果B函数执行完了,总栈中查看是A2,接着执行A2的下面1行代码。

    3) 括号匹配 编译器

    3、自定义栈

    定义接口

    public interface Stack<E> {
        int getSize();
        boolean isEmpty();
        void push(E e);
        E pop();
        E peek();
    }
    

      

    定义自定义栈。基于前面创建的动态数组CustomArray自定义数组(动态数组)

    public class ArrayStack<E> implements Stack<E> {
    
        CustomArray<E> array;
    
        public ArrayStack(int capacity){
            array = new CustomArray<E>(capacity);
        }
    
        public ArrayStack(){
            array = new CustomArray<E>();
        }
    
    
        public int getSize() {
            return array.getSize();
        }
    
        public boolean isEmpty() {
            return array.isEmpty();
        }
    
        public int getCapacity(){
            return  array.getCapacity();
        }
    
        public void push(E e) {
            array.addLast(e);
        }
    
        public E pop() {
            return array.removeLast();
        }
    
        public E peek() {
            return array.getLast();
        }
    
        @Override
        public String toString() {
            StringBuilder res = new StringBuilder();
            res.append("Stack: ");
            res.append("[");
            for(int i = 0; i < array.getSize(); i++){
                res.append(array.get(i));
                if(i != array.getSize() - 1){
                    res.append(", ");
                }
            }
            res.append("]");
            return  res.toString();
        }
    }
    

     

     4、编译器 括号匹配

    问题描述:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

    有效字符串需满足:

    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/valid-parentheses

    解决方法: 如下代码所示

    public class Solution {
    
        public boolean isValid(String s){
            Stack<Character> stack = new Stack<Character>() ;
            for(int i = 0; i < s.length() ; i++){
                char c = s.charAt(i);
                if(c == '(' || c == '[' || c == '{' ){
                    stack.push(c);
                }else {
                    if(stack.isEmpty()){
                        return  false;
                    }
                    char topChar = stack.pop();
                    if( c == ')' && topChar != '('){
                        return  false;
                    }
                    if( c == ']' && topChar != '['){
                        return  false;
                    }
                    if( c == '}' && topChar != '{'){
                        return  false;
                    }
                }
            }
            return  stack.isEmpty();
        }
    }
    

      

    作者:Work Hard Work Smart
    出处:http://www.cnblogs.com/linlf03/
    欢迎任何形式的转载,未经作者同意,请保留此段声明!

  • 相关阅读:
    将DLL嵌入EXE
    GridView绑定List数据源
    控制台调用WebService方法
    ASP.NET WebForms创建UserControl
    ASP.NET MVC使用Ajax刷新Partial View
    《Java并发编程的艺术》第5章 Java中的锁(下)
    《Java并发编程的艺术》第5章 Java中的锁 (上)
    Netty学习之理解epoll
    Netty学习之IO模型
    【转载】《理解Nginx源码》-Nginx配置文件
  • 原文地址:https://www.cnblogs.com/linlf03/p/14384308.html
Copyright © 2011-2022 走看看