• 数据结构(二)_栈


    定义

    栈是一种线性结构,栈是一种后进先出的数据结构

    last in first out(LIFO)

    图解示例

    (来源于网络)

    代码实现

    这里使用之前写的动态数组类

    Stack接口

    /**
     * @author: curry
     * @Date: 2018/8/7
     */
    public interface Stack<E> {
    
        /**
         * 获取栈中元素数量
         *
         * @return
         */
        int getSize();
    
        /**
         * 判断是否为空
         *
         * @return
         */
        boolean isEmpty();
    
        /**
         * 存放元素
         *
         * @param e
         */
        void push(E e);
    
        /**
         * 出栈
         *
         * @return
         */
        E pop();
    
        /**
         * 获取栈顶的值
         *
         * @return
         */
        E peek();
    }
    
    

    ArrayStack

    /**
     * @author: curry
     * @Date: 2018/8/7
     */
    public class ArrayStack<E> implements Stack<E> {
    
        private  Array<E> array;
    
        public ArrayStack(int capacity) {
            array = new Array<>(capacity);
        }
    
        public ArrayStack() {
            array = new Array<>();
        }
    
    
        @Override
        public int getSize() {
            return array.getSize();
        }
    
        @Override
        public boolean isEmpty() {
            return array.isEmpty();
        }
    
        @Override
        public void push(E e) {
            array.addLast(e);
        }
    
        @Override
        public E pop() {
            return array.removeLast();
        }
    
        @Override
        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("] top" );
            return res.toString();
        }
    }
    
    

    练习题

    这个是LeetCode上的20题

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

    有效字符串需满足:

    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。

    示例 1:

    输入: "()"
    输出: true
    示例 2:

    输入: "()[]{}"
    输出: true
    示例 3:

    输入: "(]"
    输出: false
    示例 4:

    输入: "([)]"
    输出: false
    示例 5:

    输入: "{[]}"
    输出: true


    代码实现

    import java.util.Stack;
    
    /**
     * @author: curry
     * @Date: 2018/8/11
     */
    public class Solution {
        public boolean isValid(String s) {
            Stack<Character> stack = new Stack<>();
            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();
        }
    }
    
    
  • 相关阅读:
    高德地图信息窗体轮播及多组坐标点添加
    移动端适配及px转rem
    css伪类样式覆盖
    vue-amap-marker相关问题,信息窗体及自定义图片的偏移问题
    echart自定义图例样式及统计图颜色相关
    ts学习笔记[枚举类型]
    从面试中查漏补缺
    百度编译器插入自定义内容和样式(转)
    .net的母版页相关
    几种Position属性的用法
  • 原文地址:https://www.cnblogs.com/zhenghengbin/p/9461545.html
Copyright © 2020-2023  润新知