2.栈
Posted zouke1220
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.栈相关的知识,希望对你有一定的参考价值。
栈是一种后进先出的线性数据结构
1.栈的应用:
(1)撤销--编辑器
(2)程序调用的系统栈--操作系统
(3)括号匹配--编译器(https://leetcode-cn.com/problems/valid-parentheses/description/)
给定一个只包括 ‘(‘
,‘)‘
,‘{‘
,‘}‘
,‘[‘
,‘]‘
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
import java.util.Stack; 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(); } }
调用实例:
public class Main { public static void main(String[] args) { Solution so = new Solution(); String s = "(){]{}"; boolean res = so.isValid(s); System.out.println(res); //false } }
2.栈的基本实现
public interface Stack<E> { int getSize(); boolean isEmpty(); void push(E e); E pop(); E peek(); }
实现接口
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(); } public int getCapacity(){ return array.getCapacity(); } @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(); } }
调用实例:
public class Main { public static void main(String[] args) { ArrayStack<Integer> stack = new ArrayStack<>(); for(int i = 0;i < 5;i ++){ stack.push(i); System.out.println(stack); } stack.pop(); System.out.println(stack); // Stack:[0] top // Stack:[0,1] top // Stack:[0,1,2] top // Stack:[0,1,2,3] top // Stack:[0,1,2,3,4] top // Stack:[0,1,2,3] top } }
3.栈的复杂度分析
以上是关于2.栈的主要内容,如果未能解决你的问题,请参考以下文章