概念
栈(stack)实现后进先出(last-in first-out LIFO)策略。
对栈的操作分为两种:压入(PUSH)和弹出(POP), 即插入和删除。
对栈的检验也分两种:是否为空和是否为满。当我们执行压入操作时,自然先要判断栈是否满了,再进行压入;相对应的,当我, 执行弹出操作时,自然先判断栈是否为空,再进行弹出。
以此,我们可以构建一个完整的栈。
JAVA 实现
在现在JAVA库中,栈的实现基于vector类,栈是其子类,具有线程安全性,但大大降低了性能。这里我们可以利用LinkedList类的特性来实现栈。
参考资料:https://segmentfault.com/a/1190000018694163
import java.util.LinkedList;
import java.util.NoSuchElementException;
public class Stack<T> {
private LinkedList<T> stack;
Stack(){
stack = new LinkedList<>();
}
/*
* 压入
* 因为是基于链表实现的栈,栈的size可以自增,所以在这里不需要判断栈是否满了
*/
public void push(T o) {
stack.add(o);
}
/*
* 弹出
* 在进行弹出操作时,需要先判断是否为空
*/
public T pop(){
if(size()<=0) {
throw new NoSuchElementException("Stack is Empty.");
}
return stack.removeLast();
}
/*
* 查看最顶层数据
*/
public T peek() {
if(size()<=0) {
throw new NoSuchElementException("Stack is Empty.");
}
return stack.getLast();
}
public boolean empty() {
return stack.size() == 0;
}
public int size() {
return stack.size();
}