博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Algs4-1.3.36随机迭代器
阅读量:5822 次
发布时间:2019-06-18

本文共 1544 字,大约阅读时间需要 5 分钟。

1.3.36随机迭代器。为上一题中的RandomQueue<Item>编写一个迭代器,随机返回队列中的所有元素。

答:
图片
import java.util.Iterator;
public class RandomQueue<Item> implements Iterable<Item>
{
    private int N=0;
    private Item[] a=(Item[]) new Object[1];
    public RandomQueue()
    {
    }
   
    public boolean isEmpty()
    {return N==0;}
   
    public void enqueue(Item item)
    {
        if(N==a.length) resize(2*N);
        a[N]=item;
        N++;
    }
   
    public Item dequeue()
    {
        int r=StdRandom.uniform(N);
        Item item=a[r];
        a[r]=a[N-1];
        N--;
        if(N==a.length/4) resize(2*N);
        return item;
     }
   
    public Item sample()
    {
        int r=StdRandom.uniform(N);
        return a[r];
    }
   
    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 Iterator<Item> iterator()  {return new ListIterator();}
   
    private class ListIterator implements Iterator<Item>
    {
        private int index=0;
        public ListIterator()
        {
            for (int i = 0; i < N; i++)
            {
               int r = i + StdRandom.uniform(N-i);     // between i and n-1
               Item temp = a[i];
               a[i] = a[r];
               a[r] = temp;
            }
        }
        public boolean hasNext(){return index!=N;}
        public void remove(){}
        public Item next()
        {
           
            Item item=a[index];
            index++;
            return item;
        }//end next
      }//end class ListIterator
    public static void main(String[] args)
    {
        RandomQueue<Card> cards=new RandomQueue<Card>();
       
        for(int value=1;value<=13;value++)
            for(int type=1;type<=4;type++)
               {
                  Card c=new Card();
                  c.value=value;
                  c.type=type;
                  cards.enqueue(c);
              }//end for
     
      while(!cards.isEmpty())
      {
           Card c=cards.dequeue();
           StdOut.print("("+c.value+"," +c.type+")");
      }//end while
   }//end main
}//end class

转载于:https://www.cnblogs.com/longjin2018/p/9854316.html

你可能感兴趣的文章
hive基本操作与应用
查看>>
excel快捷键设置
查看>>
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
django 目录结构修改
查看>>
win8 关闭防火墙
查看>>
CSS——(2)与标准流盒模型
查看>>
MYSQL 基本SQL语句
查看>>
C#中的Marshal
查看>>
linux命令:ls
查看>>
Using RequireJS in AngularJS Applications
查看>>
hdu 2444(二分图最大匹配)
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>
ios xmpp demo
查看>>
python matplotlib 中文显示参数设置
查看>>