算法第四版 练习1.3.35

本文介绍了一个基于Java实现的随机队列(RandomQueue)类和一个卡片(Card)类的设计。随机队列允许元素随机进出,并能动态调整大小;卡片类则通过随机选择创建不同花色和数字的扑克牌。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RandomQueue.java

import edu.princeton.cs.algs4.StdRandom;

public class RandomQueue<Item> {
    private Item[] item;
    private int N;
    public RandomQueue()
    {
        item = (Item[])(new Object[10]);
    }
    public boolean isEmpty()
    {
        return N == 0;
    }
    public void resize(int n)
    {
        @SuppressWarnings("unchecked")
        Item[] temp = (Item[])(new Object[n]);
        for (int i = 0; i < N; ++i)
            temp[i] = item[i];
        item = temp;
    }
    public void enqueue(Item data)
    {
        if (N == item.length)
            resize(2 * N);
        item[N++] = data;
    }
    public Item dequeue()
    {
        if (isEmpty())
            return null;
        //random swap
        int r = StdRandom.uniform(N);
        Item temp = item[r];
        item[r] = item[--N];
        item[N] = null;
        return temp;
    }
    public Item sample()
    {
        if (isEmpty())
            return null;
        int r = StdRandom.uniform(N);
        Item ret = item[r];
        return ret;
    }
    public int size()
    {
        return N;
    }
}

Card.java

import edu.princeton.cs.algs4.StdRandom;

public class Card {
    private String name;
    private String flowercolor;
    public Card()
    {
        String[] nget = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        String[] fget = {"红桃","黑桃","梅花","棉花"};
        int n = StdRandom.uniform(13);
        int f = StdRandom.uniform(4);
        name = nget[n];
        flowercolor = fget[f];
    }
    public String toString()
    {
        return flowercolor + name;
    }
}

main.java

import edu.princeton.cs.algs4.StdOut;
import edu.princeton.cs.algs4.StdRandom;

public class Main {
    public static void main(String[] args)
    {
        RandomQueue<Card> rd = new RandomQueue<Card>();
        for (int i = 0; i < 13; ++i)
            rd.enqueue(new Card());
        for (int i = 0; i < 13; ++i)
        {
            if (StdRandom.bernoulli())
                StdOut.println(rd.dequeue());
            else
                StdOut.println(rd.sample());
        }
        StdOut.println(rd.size());
    }
}

这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值