• 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);
            }
        }
    }
    
    
  • 相关阅读:
    正则表达式 之领宽断言
    bat(续七)-for语句(循环结构)
    RBAC权限管理
    Redis缓存服务搭建及实现数据读写
    Myeclipse集成Maven(图文说明)
    实习第四周
    POJ 3461 Oulipo KMP算法题解
    原创文章
    apue和unp的学习之旅07——多种边界条件的讨论
    单链表的实现
  • 原文地址:https://www.cnblogs.com/Glov/p/13368752.html
Copyright © 2020-2023  润新知