算法_栈的Java的通用数组实现

  栈是一个常用的最简单的数据结构,这里提供了其实现.内部维护了一个数组,并且可以动态的调整数组的大小.而且,提供了迭代器支持后进先出的迭代功能.Stack的实现是所有集合类抽象数据类型实现的模板,它将所有元素保存在数组中,并动态的调整数组的大小,以保持数组大小和栈大小之比小于一个常数.

  

import java.util.Iterator;

public class ResizingArrayStack<Item> implements Iterable<Item> {
    private Item [] a=(Item[])new Object[1];//内部维护了一个数组,存储数据.
    private int N;    //元素数量.
    public ResizingArrayStack() {}
    
    public boolean isEmpty() {
        return N==0;
    }
    public int size() {
        return N;
    }
    public void push(Item item) {
        if(N==a.length) resize(2*a.length);    //如果不断压入,自由的变更大小
        a[N++]=item;
    }
    public Item pop() {
        Item str=a[--N];
        a[N]=null;
        if(N<a.length/4) resize(a.length/2);//如果不断弹出,保证内存的利用率
        return str;
    }
    public void resize(int n) {
        //将数组引用指向一个更大的数组
        Item[] items=(Item[])new Object[n];
        for(int i=0;i<a.length;i++) {
            items[i]=a[i];
        }
        a=items;
    }
    @Override
    public Iterator<Item> iterator() {
        return new ReverseArrayIterator();
    }
    private class ReverseArrayIterator implements Iterator<Item> {
        //支持后进先出的迭代.
        int i=N;
        @Override
        public boolean hasNext() {
            return i>0;
        }

        @Override
        public Item next() {
            return a[--i];
        }    
    }
}
原文地址:https://www.cnblogs.com/hlhdidi/p/5625658.html