List实现队列--杀人游戏
发布日期:2021-05-09 09:33:48 浏览次数:28 分类:博客文章

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

使用list集合实现一个队列

package queue;/* * @auther 顶风少年 * @mail dfsn19970313@foxmail.com * @date 2020-01-09 09:42 * @notify * @version 1.0 */import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Queue
{ private ArrayList
queue = new ArrayList
(); //从队列尾部添加元素 public void add(T... ts) { List
ts1 = Arrays.asList(ts); queue.addAll(ts1); } //从队列头部删除一个元素 public T del() { if (queue.isEmpty()) { return (T) "-1"; } T remove = queue.remove(0); return remove; } //返回头部的元素,不是删除 public T head() { if (queue.isEmpty()) { return (T) "-1"; } return queue.get(0); } //返回队列的大小 public int size() { return queue.size(); } //清空队列 public void clear() { queue.clear(); } //判断队列是否为空 public boolean isEmpty() { return queue.isEmpty(); } //返回队列尾部元素 public T tail() { if (queue.isEmpty()) { return (T) "-1"; } return queue.get(queue.size() - 1); }}
View Code

/*
* 约瑟夫问题是个有名的问题:
* N个人围成一圈,从第一个开始报数,第M个将被杀掉,
* 最后剩下一个,其余人都将被杀掉。例如N=6,M=5,
* 被杀掉的顺序是:5,4,6,2,3,1。
* 思路:做一个计数器,计数器起步为1,被杀者从1开始喊,前4个人
* 1 2 3 4 不会被杀,但是当第N个人喊完数后,还要从第一个开始喊,
* 所以我们将没有被杀的依次从队列的头部删除,添加到队列尾部,并将计数器+1。形成
* 一个圆环,当计数器喊道5,则表示有人要被杀,此时将计数器归为1.直到队列中只剩下
* 一个人。
* */

@Test    public void t1() {        Queue queue = new Queue();        queue.add(1, 2, 3, 4, 5, 6);        int index = 1;        while (queue.size() != 1) {            if (index == 5) {                Object del = queue.del();                index = 1;                System.out.println(del);            } else {                Object del = queue.del();                queue.add(del);                index += +1;            }        }        System.out.println("幸运儿:" + queue.head());    }
View Code

/*菲波那切数列
* 1 1 2 3 5 8 13 21 34 55
* 从第三个数开始,当前数是前两个数相加的值。
* 1 1 2
* 1 2 3
* 2 3 5
* 3 5 8
* 。。。
* 思路:计算第10项则需要累加10次。前两个 1 1 占两项。
* 循环条件为当前项小于总项数
* 每次循环将队列头部元素移除,将移除的元素和当前队列头部元素相加
* 即为下一项的值。1 1 将1移除和1相加为2 将2添加队列。
* 1 2 将1移除和2相加为3,将3添加队列尾部。循环结束队列中有两个数字
* 队列尾部的则为计算后的值
* */

@Test    public void t2() {        int item = 10;        int index = 2;        Queue
queue = new Queue<>(); queue.add(1, 1); while (index < item) { Integer del = queue.del(); queue.add(queue.head() + del); index += 1; } System.out.println(queue.tail()); }
View Code

转载地址:https://www.cnblogs.com/zumengjie/p/12171930.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:30分钟教你写一个mybatis框架
下一篇:List实现栈结构,应用于波兰算法

发表评论

最新留言

不错!
[***.144.177.141]2024年08月23日 21时01分08秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章