栈的定义:
栈是一种先进后出的线性表 栈定义只能在栈的顶端对数据进行操作
栈的操作:
进栈 public void push(E e)
出栈 public E pop()
栈是否空 public boolean isEmpty()
获取栈顶元素 public E getTop()
获取栈大小 public int getSize()
栈的原理:
入栈:
出栈:
栈的应用:
迷宫问题
表达式求值
图的深度遍历DFS
递归调用
子程序执行
撤销键
栈的实现:
我用的 ArrayList集合 其实就是封装好的数组 比较方便
package demo;
import java.util.*;
public class Stack {
private List stack = new ArrayList();
public Stack() {
super();
}
public Stack(List stack) {
super();
this.stack = stack;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
@SuppressWarnings("unchecked")
Stack other = (Stack) obj;
if (stack == null) {
if (other.stack != null)
return false;
} else if (!stack.equals(other.stack))
return false;
return true;
}
//获取栈当前大小
public int getSize() {
return stack.size();
}
//获取顶部元素
public E getTop() {
E e = stack.get(stack.size()-1);
return e;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((stack == null) ? 0 : stack.hashCode());
return result;
}
//判断栈是否为空
public boolean isEmpty() {
if (stack.size() ==0) {
return true;
}
return false;
}
//出栈 返回出栈元素可能会用到
public E pop() {
E e = stack.get(stack.size()-1);
stack.remove(stack.size()-1);
return e;
}
//进栈
public void push(E e) {
stack.add(e);
}
@Override
public String toString() {
return "Stack [stack=" + stack + "]";
}
}