栈(堆栈,Stack):是一种特殊的线性表,只能在表尾进行插入和删除操作。
栈顶(Top):线性表允许插入的那一端。
栈底(Bottom):固定的,不允许进行插入和删除的另一端。
空栈:不含任何元素的空表。
因为栈底是封闭的,因此,先进入栈中的元素,只能等待后进入的元素出栈后才能被取出。遵循“先进后出”原则。
栈的操作:
- pop:出栈操作,从栈顶取出一个元素
- push:入栈操作,从栈顶加入一个元素
Java代码实现
public class LinkedStack<E> {
private final Node<E> head = new Node<>(null);
//入栈操作
public void push(E element){
Node<E> node=new Node<>(element); //创建新的结点
node.next = head.next; //新结点下一个结点变成栈顶结点
head.next = node; //头结点的下一个结点改成新的结点
}
//出栈操作
public E pop(){
if(isEmpty()){//判断栈是否为空
throw new NoSuchElementException("栈空");
}
E e = head.next.element;//取出栈顶元素
head.next = head.next.next;//更改栈顶元素
return e;
}
public boolean isEmpty(){//判断栈是否为空
return head.next == null;
}
private static class Node<E>{
private E element;
private Node<E> next;
public Node(E e){
this.element = e;
}
}
}
测试
public class LinkedStackTest {
public static void main(String[] args) {
LinkedStack<String> stack = new LinkedStack<>();
stack.push("A");//入栈操作
stack.push("B");
stack.push("C");
stack.push("D");
while (!stack.isEmpty()){
System.out.println(stack.pop());//进行出栈操作
}
}
}