理解
先进后出(FIFO)
数组实现
import java.util.Arrays;
class Mystack<T> {
//实现栈的数组
private Object[] stack;
//栈顶元素
private int top;
Mystack() {
//初始容量
stack = new Object[10];
}
//判断栈是否为空
public boolean isEmpty() {
return top == 0;
}
//返回栈顶元素
public T peek() {
T t = null;
if(top > 0) {
t = (T) stack[top - 1];
}
return t;
}
public void push(T t) {
expandCapacity(top + 1);
stack[top] = t;
top++;
}
//出栈
public T pop() {
T t = peak();
if(top > 0) {
stack[top - 1] = null;
top--;
}
return t;
}
//扩容
public void expandCapacity(int size) {
int len = stack.length;
if(size > len) {
size = size * 3 / 2 + 1;//每次扩大50%
stack = Array.copyOf(stack, size);
}
}
}
链表实现
只需要所有的添加、删除都在头节点进行即可
class ListStack<T> {
//定义
class Node<T> {
public T t;
public Node next;
}
public Node<T> head;
//构造函数初始化头指针
ListStack() {
head = null;
}
//入栈
public void push(T t) {
if(t == null) {
throw new NullPointerException("参数不能为空");
}
if(head == null) {
head = new Node<T>();
head.t = t;
head.next = null;
} else {//头插法
Node<T> temp = head;
head = new Node<>();
head.t = t;
head.next = temp;
}
}
//出栈
public T pop() {
if(head == null) {
return null;
}
T t = head.t;
head = head.next;
return t;
}
//取栈顶元素
public T peek() {
if(head == null) {
return null;
}
T t = head.t;
return t;
}
//栈空
public boolean isEmpty() {
if(head == null) {
return true;
} else {
return false;
}
}
}