集合数据类型的实现
定容栈
//模板数组实现
public class Stack<Item> {
private Item[] a=(Item[]) new Object[1];//栈元素
private int N=0;//元素数量
private void resize(int max) {
//将栈移动到一个大小为max 的新数组
Item[] temp=(Item[]) new Object[max];
for (int i = 0; i < N; i++) {
temp[i]=a[i];
}
a=temp;
}
public void push(Item item) {
//将元素添加到栈顶
if (N==a.length) resize(2*a.length);
a[N++]=item;
}
public Item pop() {
Item item=a[--N];
a[N]=null;
if (N>0&&N==a.length/4) resize(a.length/2);
return item;
}
public Iterator<Item> iterator() {
return new ReverseArrayIterator();
}
private class ReverseArrayIterator implements Iterator<Item>{
private int i=N;
public boolean hasNext(){return i>0;}
public Item next() {return a[--i];}
@Override
public void remove() {
// TODO Auto-generated method stub
}
}
}
链表实现
public class Stackchain<Item> {
private Node first;//栈顶
private int N;//元素数量
private class Node{
//定义结点的嵌套类
Item item;
Node next;
}
public Stackchain() {
// TODO Auto-generated constructor stub
}
public void push(Item item){
Node oldfirst=new Node();
first=new Node();
first.next=oldfirst;
N++;
}
public Item pop() {
Item item=first.item;
first=first.next;
N--;
return item;
}
public Iterator<Item> iterator() {
return new ReverseArrayIterator();
}
private class ReverseArrayIterator implements Iterator<Item>{
private Node i;
public boolean hasNext(){return i!=null;}
public Item next() {
i=i.next;
return i.item;
}
@Override
public void remove() {
// TODO Auto-generated method stub
}
}
}