zoukankan      html  css  js  c++  java
  • ResizingArrayStack

    ResizingArrayStack

    关于迭代器

    Iterable 是JDK源码,可以通过成员内部类,方法内部类,匿名内部类实现Iterator。

    public interface Iterable<Item>//对应接口(java.lang.Iterable)
    {
    	Iterator <Item> iterator();
    }
    

    Iterator是一个实现了hasNext()和Next()方法的类的对象,接口定义如下

    public interface Iterator<Item>//对应接口(java.util.Iterator)
    {
        boolean has next();
        Item next();
        void remove();
    }
    

    代码实现

    package chapter1.a3;
    //下压栈,动态调整数组大小的实现
    import edu.princeton.cs.algs4.StdIn;
    import edu.princeton.cs.algs4.StdOut;
    
    import java.util.Iterator;
    public class ResizingArrayStack<Item> implements Iterable<Item>
    {
        private Item[] a = (Item[]) new Object[1];
        private int N = 0;
        public boolean isEmpty(){ return N == 0; }
        public int size(){ return N; }
        private void resize(int 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[--N];  }
            public void remove()    {                    }
        }
        public static void main(String[] args)
        {
            FixedCapacityStack<String> s;
            s = new FixedCapacityStack<String>(100);
            while (!StdIn.isEmpty()) {
                String item = StdIn.readString();
                if (!item.equals("-"))
                    s.push(item);
                else if (!s.isEmpty()) StdOut.print(s.pop() + " ");
            }
            StdOut.println("(" + s.size() + " left on stack)");
            for (String i: s)
            {
                StdOut.println(i);
            }
        }
    }
    
    
  • 相关阅读:
    在C#中使用官方驱动操作MongoDB
    【C#设计模式-抽象工厂模式】
    【MongoDB-MongoVUE图像管理工具】
    【MongoDB-query查询条件】
    【MongoDB学习-安装流程】
    【MongoDB学习-在.NET中的简单操作】
    【MongoDB】2.可视化工具的安装和使用
    越狱Season 1-Episode 12:Odd Man Out
    越狱Season 1-Episode 11: And Then There Were 7-M
    越狱Season 1-Episode 10: Sleight of Hand
  • 原文地址:https://www.cnblogs.com/Glov/p/13368752.html
Copyright © 2011-2022 走看看