我的Github地址
小码哥《恋上数据结构与算法》笔记
极客时间《iOS开发高手课》笔记
iOS大厂面试高频算法题总结
iOS面试资料汇总
参考:小码哥数据结构与算法(五):栈
数据结构和算法动态可视化
一、栈
- 栈是一种特殊的
线性表, 只能在一端进行操作。
- 往栈中
添加元素的操作,一般叫做push,入栈。
- 从栈中
移除元素的操作,一般叫做pop,出栈(只能移除栈顶的元素)。
- 栈的内部实现可以使用
动态数组或双向链表实现。
- 栈的主要操作是在尾部
添加或删除元素。

二、栈的接口设计
public class Stack<E> {
private List<E> list = new ArrayList<>();
public int size();
public boolean isEmpty();
public void push(E element);
public E pop();
public E top();
}
三、栈的实现
public class Stack<E> {
private ArrayList<E> list;
public Stack() {
this.list = new ArrayList<>();
}
public int size() {
return list.size();
}
public boolean isEmpty() {
return list.isEmpty();
}
public void push(E element) {
list.add(element);
}
public E pop() {
return list.remove(list.size() - 1);
}
public E top() {
return list.get(list.size() - 1);
}
public void clear() {
list.clear();
}
}
四、leetcode算法题

public boolean isValid1(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 left = stack.pop();
if (left == '(' && c != ')') return false;
if (left == '{' && c != '}') return false;
if (left == '[' && c != ']') return false;
}
}
return stack.isEmpty();
}