这个泛型的栈实现的基础是链表数据结构,它可以用来任意数据类型的栈。
首先写一个简单的链表的遍历:
for(Node x=first;x!null;x=x.next)
{
//处理x.item
}
进入正题,用链表实现泛型的栈:
import java.util.Iterator;
public class StackNode<Item> implements Iterable<Item>
{
private Node first; //栈顶,最近添加的元素
private int N; //元素数量
private class Node
{//定义了结点的嵌套类
Item item;
Node next;
}
public boolean isEmpty() {return first==null;}
public int size() {return N;}
public void push(Item item)
{//向栈顶添加元素
Node oldfirst=first;
first=new Node();
first.item=item;
first.next=oldfirst;
N++;
}
public Item pop()
{//从栈顶删除元素
Item item=first.item;
first=first.next;
N--;
return item;
}
public Iterator<Item> iterator() {return new ListIterator();}
private class ListIterator implements Iterator<Item>
{
private Node current=first;
public boolean hasNext() {return current!=null; }
public void remove() {}
public Item next()
{
Item item=current.item;
current=current.next;
return item;
}
}
}
参考:《算法第四版》 Robert Sedgewick、Kevin Wayne (谢路云译) P94