栈的链式存储结构实现:
package linkstack; public class LinkStack<E> { //链栈的节点 private class Node<E>{ E e; Node<E> next; public Node(){} public Node(E e, Node next){ this.e = e; this.next = next; } } private Node<E> top; //栈顶元素 private int size; //当前栈大小 public LinkStack(){ top = null; } //当前栈大小 public int length(){ return size; } //判空 public boolean empty(){ return size==0; } //入栈:让top指向新创建的元素,新元素的next引用指向原来的栈顶元素 public boolean push(E e){ top = new Node(e,top); size ++; return true; } //查看栈顶元素但不删除 public E peek(){ if(empty()){ throw new RuntimeException("空栈异常!"); }else{ return top.e; } } //出栈 public E pop(){ if(empty()){ throw new RuntimeException("空栈异常!"); }else{ Node<E> value = top; //得到栈顶元素 top = top.next; //让top引用指向原栈顶元素的下一个元素 value.next = null; //释放原栈顶元素的next引用 size --; return value.e; } } }LinkedList实现队列的实现
import java.util.LinkedList; /** * 基于LinkedList实现栈 * 在LinkedList实力中只选择部分基于栈实现的接口 */ public class StackList<E> { private LinkedList<E> ll = new LinkedList<E>(); //入栈 public void push(E e){ ll.addFirst(e); } //查看栈顶元素但不移除 public E peek(){ return ll.getFirst(); } //出栈 public E pop(){ return ll.removeFirst(); } //判空 public boolean empty(){ return ll.isEmpty(); } //打印栈元素 public String toString(){ return ll.toString(); } }