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];
            }    
        }
    }
  • 相关阅读:
    LeetCode 121. Best Time to Buy and Sell Stock
    LeetCode 221. Maximal Square
    LeetCode 152. Maximum Product Subarray
    LeetCode 53. Maximum Subarray
    LeetCode 91. Decode Ways
    LeetCode 64. Minimum Path Sum
    LeetCode 264. Ugly Number II
    LeetCode 263. Ugly Number
    LeetCode 50. Pow(x, n)
    LeetCode 279. Perfect Squares
  • 原文地址:https://www.cnblogs.com/hlhdidi/p/5625658.html
Copyright © 2011-2022 走看看