zoukankan      html  css  js  c++  java
  • 算法_栈的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];
            }    
        }
    }
  • 相关阅读:
    2018年7月10日笔记
    2018年7月7日笔记
    2018年7月5日笔记
    2018年7月3日笔记
    sed 命令详解
    《软件构架实践》阅读笔记01
    《掌握需求过程》阅读笔记06
    《掌握需求过程》阅读笔记05
    第十二周进度条
    《掌握需求过程》阅读笔记04
  • 原文地址:https://www.cnblogs.com/hlhdidi/p/5625658.html
Copyright © 2011-2022 走看看