zoukankan      html  css  js  c++  java
  • 数据结构之【栈】

    2 数据结构之栈

    2.1 什么是栈

    栈是一种线性结构,相比数组,栈的操作是数组的子集;

    只能从一端添加元素,从同一端取出元素,这一端称为栈顶。

     

    在java中栈是Vector的一个子类,它实现了一个标准的后进先出的栈。除了包括由Vector定义的所有方法,也定义了自己的一些方法。

    2.2 栈的基本实现

    这里在上一节实现的动态数组的基础之上来实现栈这种数据接口。

    先写栈的接口Stack.java

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

    实现的栈要有接口中定义的这几种方法。另外 我们在Array类中再添加removeLast()和getLast(),方面我们调用来实现栈的功能。

    //删除最后一个元素
        public E removeLast() {
            return remove(size-1);
        }
    
    //获取最后一个元素
        public E getLast() {
            return get(size - 1);
        }

    由于是基于数组实现的栈,那我们就把栈取名为:ArrayStack.java

    package cc.myall.demo02;
    public
    class ArrayStack<E> implements Stack<E>{ 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(); } }

    这样,栈这种数据结构就完成。

    2.3 小应用:括号的匹配

    题目地址:https://leetcode-cn.com/problems/valid-parentheses/

     

    解题思路:利用栈这种数据结构。

     

    我们使用的是java内置的栈。

    import java.util.Stack;
    class Solution {
        public boolean isValid(String s) {
            Stack<Character> stack = new Stack<>();
            int len = s.length();
            for(int i = 0; i < len; 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();
        }
    }

    提交获得通过。

     

    代码: https://github.com/zhang-anan/DataStructure/tree/master/src/cc/myall/demo02

  • 相关阅读:
    WordPress错误:无法启用插件,因为它引起了一个致命错误
    快速使用 Thinkphp 之一: 准备工作-配置PHP环境及下载Thinkphp文件
    基于XML文件格式引用页面
    PHP清除html、css、js格式并去除空格的PHP函数
    本地无法启动MySQL服务,报的错误:1067,进程意外终止
    快速使用 Thinkphp 之二: 创建自己的应用项目
    HTML页面里加载flash文件源码
    【学习笔记】数据库 windrainpy
    【转】给年轻程序员的建议 windrainpy
    【转】js变量以及其作用域详解 windrainpy
  • 原文地址:https://www.cnblogs.com/zhang-anan/p/10088470.html
Copyright © 2011-2022 走看看