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

  • 相关阅读:
    Android Studio 开发
    Jsp编写的页面如何适应手机浏览器页面
    电影
    Oracle 拆分列为多行 Splitting string into multiple rows in Oracle
    sql server 2008 自动备份
    WINGIDE 激活失败
    python安装 错误 “User installations are disabled via policy on the machine”
    ble编程-外设发送数据到中心
    iOS开发-NSString去掉所有换行及空格
    ios9 字符串与UTF-8 互相转换
  • 原文地址:https://www.cnblogs.com/zhang-anan/p/10088470.html
Copyright © 2011-2022 走看看