public class Stack<Item>  {
    private Node first;//栈顶
    private int N;//元素数量
    private class Node{
        Item item;
        Node next;
    }
    public  boolean isEmpty() { return first== null;} // 或:N=0
    public int size() {return N;}
    public void push(Item item){
      Node olderfirst= first;
        fist = new Node();
        first.item=item;
        first.next=olderfirst;
        N++;
    }
    public Item pop(){
       Item item= first.item;
       first=first.next;
       N--;
       return item; 
    }
}

优点:
* 它可以处理任意类型的数据*
* 所需的空间总是和集合的大小成正比*
* 操作所需的时间总是和集合的大小无关*