棧是一種線性結構,相比數組,棧的操做是數組的子集;java
只能從一端添加元素,從同一端取出元素,這一端稱爲棧頂。git
在java中棧是Vector的一個子類,它實現了一個標準的後進先出的棧。除了包括由Vector定義的全部方法,也定義了本身的一些方法。github
這裏在上一節實現的動態數組的基礎之上來實現棧這種數據接口。數組
先寫棧的接口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
題目地址: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