作业要求

  • 1 补充课上没有完成的作业
    2 参考15.3节,用自己完成的队列(链队,循环数组队列)实现模拟票务柜台排队功能
    3 用JDB或IDEA单步跟踪排队情况,画出队列变化图,包含自己的学号信息
    4 把代码推送到代码托管平台
    5 把完成过程写一篇博客:重点是单步跟踪过程和遇到的问题及解决过程
    6 提交博客链接

模拟票务柜台排队的实现

  • 使用链表实现队列只需补充程序15.5即可:
public class LinkedQueue<T> implements Queue<T> {private int count;private LinearNode<T> front,rear;/*Creates an empty queue.*/public LinkedQueue(){count = 0;front = rear = null;}/*Adds the specified element to the rear of this queue.*/public void enqueue(T element) {LinearNode<T> node = new LinearNode<>(element);if(count == 0) {front = node;}else {rear.setNext(node);}rear = node;count++;}/*Removes the rear element from the front of the queue.*/public T dequeue() throws EmptyCollectionException{if (isEmpty()) {throw new EmptyCollectionException("The queue is empty.");}T result = front.getElement();front = front.getNext();count--;if (isEmpty()) {rear = null;}return result;}/*Examines the element at the front of the queue.*/public T first() throws EmptyCollectionException{if (isEmpty()){throw new EmptyCollectionException ("The queue is empty.");}return front.getElement();}/*Determines if the queue is empty.*/public boolean isEmpty() {return count == 0;}/*Determines the number of elements on the queue.*/public int size() {return count;}/*Returns the representation of the queue.*/public String toString(){String result = "";LinearNode<T> current = front;while (current != null){result += current.getElement().toString() + "\n";current = current.getNext();}return result;}
}

和实现栈相同的是,可以使用上一章中的 LinearNode类 创建的对象实现队列;和实现栈不同的是,这里必须在链表的两端进行操作。
由于实现的是单链表,所以要将新元素放在表尾。如果队列为空,那么front和rear都指向表头结点。实现表头出队和检测对头元素操作时,注意空队列要抛出异常。还要注意出队操作时要判断两次队列是否为空,第一次为空则抛出异常,第二次为空则(在删除前面的元素之后)将rear置为null。

  • 使用数组实现队列只需补充程序15.6即可:
public class CircularArrayQueue<T> implements Queue<T> {private final int DEFAULT_CAPACITY = 10;private int front, rear, count;private T[] queue;/*Creates an empty queue using the default capacity.*/public CircularArrayQueue() {front = rear = count = 0;queue = (T[]) (new Object[DEFAULT_CAPACITY]);}/*Adds the specified element to the rear of this queue,expandingthe capacity of the queue array if necessary.*/public void enqueue(T element) {if (count == queue.length) {expandCapacity();}queue[rear] = element;rear = (rear + 1) % queue.length;  //取余赋值确定下一个可用位置count++;}/*Creates a new array to store the contents of this queue withtwice the capacity of the old one.*/public void expandCapacity() {T[] larger = (T[]) (new Object[queue.length * 2]);for (int index = 0; index < count; index++) {larger[index] = queue[(front + index) % queue.length];  //按相对次序复制数组}front = 0;rear = count;queue = larger;}/*Removes the rear element from the queue.*/public T dequeue() throws EmptyCollectionException {if (isEmpty()) {throw new EmptyCollectionException("queue");}T result = queue[front];queue[front] = null;front = (front + 1) % queue.length;  //取余赋值确定下一个出队位置count--;return result;}/*Examines the element at the front of the queue.*/public T first() throws EmptyCollectionException {if (isEmpty()) {throw new EmptyCollectionException("queue");}return queue[front];}/*Determines if the queue is empty.*/public boolean isEmpty() {return (count == 0);}/*Determines the number of elements on the queue.*/public int size() {return count;}/*Returns the representation of the queue.*/public String toString() {String result = "";int scan = 0;while (scan < count) {if (queue[scan] != null) {result += queue[scan].toString() + "\n";}scan++;}return result;}
}

和使用数组实现栈不同的是,这里使用了“取余赋值”的方式确定入队和出队位置,不论是扩容前还是扩容后都适用,同时也包含了队列为空的情况(出队操作不需要第二次判空赋值)。比如入队操作中的 rear = (rear + 1) % queue.length ,就可以通过取余赋值确定下一个可用位置。
这里的扩容方法比实现栈复杂一些,要求按照相对次序复制原数组,在扩容后更新,front需要置为0,rear需要置为count。这里的toString方法由于遍历不会影响其他操作所以不用像链表一样使用另外创建的临时变量代替front引用。

  • 关于实现模拟票务柜台的Customer顾客队列和TicketCounter类,要求如下:

    • 只排一个队,并且先来先服务。
    • 平均15秒来一位顾客。
    • 如果增加一位售票员,立即投入工作。
    • 从顾客来到售票员跟前买票到买完离开,平均需要2分钟(120秒)。
  • 书中已经给出相关代码,相关代码见【托管链接】

IDEA单步跟踪情况

  • cashiers = 1时部分运行截图:(单击图片可放大)(部分理解及问题已用绿色字体标出)



队列变化图

  • 运行结果右侧为队列变化图:(单击图片可放大)

转载于:https://www.cnblogs.com/super925/p/7674936.html

20162330 第六周 蓝墨云班课 队列课下作业相关推荐

  1. 20162330 第六周 蓝墨云班课 队列加分项

    作业要求 1 用循环队列实现 2 参考PPT用循环队列打印杨辉三角 3 用JDB或IDEA单步跟踪排队情况,画出队列变化图,包含自己的学号信息 4 把代码推送到代码托管平台 5 把完成过程写一篇博客: ...

  2. 20162330 第十周 蓝墨云班课 十字链表

    作业要求 画出附件中有向图的十字链表:(附件见下图) 示例分析 示例如下: 分析: ① 首先可以标出各个顶点的序号: ② 找到每个顶点对应的入弧和出弧,可以进行标注: ③ 对于每一行的链表,都会有对应 ...

  3. 蓝墨云班课计算机测试题答案,20155317 第一周蓝墨云班课考题

    20155317 2016-2017-2 蓝墨云班课考题第2周 上周蓝墨云班课考题 1 ( 单选题 | 1 分) Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比. ...

  4. 20155317 第一周蓝墨云班课考题

    20155317 2016-2017-2 蓝墨云班课考题第2周 上周蓝墨云班课考题 1 ( 单选题 | 1 分) Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比. ...

  5. 20155317 2016-2017-2 蓝墨云班课考题第2周

    20155317 2016-2017-2 蓝墨云班课考题第2周 三: 1.用gcc -g编译vi输入的代码 2.在main函数中设置一个行断点 3.在main函数增加一个空循环,循环次数为自己学号后4 ...

  6. 基于蓝墨云班课的“出门门票”设计与改进

    陈皓(左耳朵耗子)(微博,博客)说:朋友圈很重要.一个人的朋友圈很重要,你在什么样的朋友圈,就会被什么样的朋友圈所影响. 因为<构建之法(电子版)>结识了人生好教练:周筠老师(知乎,微博, ...

  7. 基于蓝墨云平台的计算机教学,基于蓝墨云班课的中职计算机“分层教学”模式探究...

    崔月娇 一.教学现状概述 一方面,我校是面向全国招生,部分欠发达地区的学生由于资源配置导致计算机基础相当薄弱,而来自发达地区的学生早早地接触了计算机,部分计算机基础操作已相当熟练,学生的计算机水平参差 ...

  8. 补交20145226蓝墨云班课 -- MyCP

    蓝墨云班课 -- MyCP.java 具体描述: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt ...

  9. 使用springboot+vue+element-ui模仿蓝墨云班课

    声明:前端大量CSS样式从原网站复制来的,蓝墨云班课也十分好用,大家可以了解下 项目地址:前端+后端+数据库 https://gitee.com/cao-qiangqiang/a04test07/tr ...

最新文章

  1. 《白发魔女传》里面的一首诗
  2. Android 观察系统中短信内容的变化(内容观察者)
  3. [转载]对 Linux 新手非常有用的20个命令
  4. 本地目录+Eclipse+Webstorm当SVN配置库服务器更换-客户端设置方式
  5. boost::process::async_pipe相关的测试程序
  6. 中秋干货 | 架构进阶之路上的实时数仓
  7. LeetCode 1891. 割绳子(二分查找)
  8. js怎么制作html的主题,用HTML和CSS以及JS制作简单的网页菜单界面的代码
  9. [转载] Python List index方法
  10. DataBase -- JOIN
  11. qt银行排队系统服务器代码,基于qt的银行排队系统
  12. 数据结构:图的基本概念
  13. bat 脚本操作注册表
  14. 智慧工厂之化工厂人员定位中的智能访客管理系统-新导智能
  15. BGP选路负载分担的架构设计
  16. webstorm 安装激活破解方法
  17. Java 12 / JDK 12 正式发布
  18. 基于ZigBee+ESP32+MQTT+EMQX+TomCat+Servlet接口+MySQL+安卓app的物联网课设
  19. 【实验四 循环结构】7-5 sdut-C语言实验- 做乘法
  20. 互联网协议入门(一) 作者:阮一峰

热门文章

  1. 恋爱电视剧cue程序员,网友:不要侮辱这个职业!
  2. 普通程序员真实的各个面试心酸历程——愿世界没有Java技术面试
  3. iphone编辑过的录音怎么还原_我的天呐,原来iPhone里录音不仅能导出,还能转文字?!...
  4. CSP 202109-2 非零段划分
  5. 2022-06-21 Java后端面试总结
  6. 【CSDN英雄会】沪江徐宜生:掌握工具使用技巧,是提高工作效率的最佳途径
  7. 车易加:今日油价|油价上涨10元/吨,油价又要重新上涨?
  8. 松翰SN8F5703单片机WDT例程
  9. python画图模糊_Python绘图scikitfuzzy没有响应
  10. 围棋吻合度高,并不能确定用了AI