數據結構之【棧】

2 數據結構之棧

2.1 什麼是棧

棧是一種線性結構,相比數組,棧的操做是數組的子集;java

只能從一端添加元素,從同一端取出元素,這一端稱爲棧頂。git

 

在java中棧是Vector的一個子類,它實現了一個標準的後進先出的棧。除了包括由Vector定義的全部方法,也定義了本身的一些方法。github

 

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(),方面咱們調用來實現棧的功能。ide

//刪除最後一個元素
    public E removeLast() {
        return remove(size-1);
    }

//獲取最後一個元素
    public E getLast() {
        return get(size - 1);
    }

 

因爲是基於數組實現的棧,那咱們就把棧取名爲:ArrayStack.javaspa

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(); } }

 

這樣,棧這種數據結構就完成。3d

2.3 小應用:括號的匹配

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

 

解題思路:利用棧這種數據結構。blog

 

咱們使用的是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

相關文章
相關標籤/搜索