计算机科学中的队列应用:网络打印作业模拟

需积分: 0 0 下载量 26 浏览量 更新于2024-08-24 收藏 130KB PPT 举报
本实验是关于栈和队列的基础知识,特别是关注队列的应用和实现。实验背景强调了队列在计算机科学与信息技术中的广泛用途,例如在网络路由器的存储转发和图的广度优先遍历中。此外,通过打印作业管理的例子,说明了队列如何实现先来先服务的策略。 实验主要目标是加深对队列概念的理解,掌握STL中的`queue`容器的使用,并模拟一个网络打印过程。在这个过程中,需要从文件中读取事件表,每个事件记录(`eventrecord`或`ajob`)包括事件发生的时间(以秒为单位)、作业的页数以及发送作业的计算机名称。这些信息将存储在一个名为`workload`的队列中,该队列由`job`类的对象组成。 `job`类包含以下成员: 1. `string user`:表示用户的名称。 2. `int number_of_pages`:表示作业的页数。 3. 构造函数:允许创建无参数的作业对象,以及带有页数和用户信息的作业对象。 4. 成员函数:`getuser()`返回用户名称,`getnumpages()`返回作业的页数。 `event`类则表示打印事件,包含以下成员: 1. `job jobj`:表示关联的打印作业。 2. `int wait_until`:表示事件发生前的等待时间。 3. 构造函数:创建无参数的事件对象,以及带有作业和等待时间的事件对象。 4. 成员函数:`getjob()`返回事件相关的作业,`arrival_time()`返回事件到达的时间。 最后,`simulator`类是模拟器的核心,具有以下特性: 1. `int seconds_per_page`:表示每页打印所需的时间。 2. `queue<event> workload`:存储所有待处理的事件。 3. 虚函数`void addevent(event e)`:用于向工作负载队列中添加事件。 实验的具体实施要求包括从文件读取事件,创建相应的`job`和`event`对象,然后根据事件时间顺序进行处理。通过这个实验,学习者可以实践如何利用队列数据结构解决实际问题,并加深对栈和队列基本操作的理解。